🔰
[Rust] 文字列をキーとする配列のソート
こんなデータをソートしたい場合
let mut data = vec![
("攻撃力", 33.),
("会心率", 12.7),
("会心ダメージ", 20.4),
("防御力", 15.),
("会心ダメージ", 22.3),
("防御力", 33.4),
];
CODE
const ORDER: [&'static str; 4] = ["攻撃力", "防御力", "会心ダメージ", "会心率"];
fn main() {
let mut data = vec![
("攻撃力", 33.),
("会心率", 12.7),
("会心ダメージ", 20.4),
("防御力", 15.),
("会心ダメージ", 22.3),
("防御力", 33.4),
];
// 別のfnにしてもOK
let fnc = |val| ORDER.iter().position(|&v| v == val);
data.sort_by(|a, b| fnc(a.0).cmp(&fnc(b.0)));
println!("{:?}", data);
// [("攻撃力", 33.0), ("防御力", 15.0), ("防御力", 33.4), ("会心ダメージ", 20.4), ("会心ダメージ", 22.3), ("会心率", 12.7)]
}
ソート基準となる配列を作って、そのindexを利用します。
ソート自体はsort_by
で実行しています。
Discussion