【Rust】HashMapをソートする方法
RustのHashMap
をソートする方法について調べたので,こちらにメモを残しておきます.
方法
HashMap
をVec
に変換して,キーもしくはバリューでソートすれば良いです.
その際にsort_by
を用いて,比較の基準をクロージャーで指定します.
キーでソートする場合は,vec.sort_by(|a, b| a.0.cmp(&b.0));
,
バリューでソートする場合は,vec.sort_by(|a, b| a.1.cmp(&b.1));
降順にする時は,vec.sort_by(|a, b| (-a.1).cmp(&(-b.1)));
のように,マイナスをつけてあげれば良いです.
use std::collections::HashMap; fn main() { let mut map: HashMap<&str, i32> = HashMap::new(); map.insert("hoge", 100); map.insert("fuga", 500); map.insert("foo", 1); let mut vec: Vec<(&&str, &i32)> = map.iter().collect(); vec.sort_by(|a, b| a.1.cmp(&b.1)); println!("sort result: {:?}", vec); vec.sort_by(|a, b| (-a.1).cmp(&(-b.1))); println!("reverse sort result: {:?}", vec); }
結果
sort result: [("foo", 1), ("hoge", 100), ("fuga", 500)] reverse sort result: [("fuga", 500), ("hoge", 100), ("foo", 1)]
参考
rust - Sort HashMap data by value - Stack Overflow
リンク