HashMapに設定した、すべての組み合わせでループで取得し処理をしたいと考えています。
let mut test= HashMap::new(); test.insert("aaa","1111"); test.insert("aaa","2222"); test.insert("bbb","3333"); test.insert("ccc","4444"); for( key, value ) in test.iter() { println!("key={},value={}", &key, &value); }
これを実行すると、以下のようになってしまうのですが、
key=bbb,value=3333
key=aaa,value=2222
key=ccc,value=4444
登録した順番通りに、すべてを取り出すにはどのように記載すればよいでしょうか。
「登録した順番通り」で取り出したいとのことですが、キー・バリューを以下の順番で登録したときは、どういう順番になってほしいのでしょうか?
"aaa", "1111"
"bbb", "3333"
"ccc", "4444"
"aaa", "2222"
案1:キー("aaa")が最初に現れたときの順番をキープ
"aaa", "2222"
"bbb", "3333"
"ccc", "4444"
案2:"aaa"が最後に現れたときの順番
"bbb", "3333"
"ccc", "4444"
"aaa", "2222"
もし案1になって欲しいなら「キーの辞書順」に取り出すのではだめでしょうか?(登録順を実現するのはあまり簡単ではありませんが、キーの辞書順なら簡単です)
その候補だと、案1, 2 ともに「すべてを」取り出せていないので不適切だと思われます。
案1a:キー("aaa")が最初に現れたときの順番をキープ
"aaa", "1111"
"aaa", "2222"
"bbb", "3333"
"ccc", "4444"
案3:挿入順
"aaa", "1111"
"bbb", "3333"
"ccc", "4444"
"aaa", "2222"
になるのではないでしょうか。
上記4ケースであれば、案3の挿入順になります。
案3で承知しました。IgaguriMKさんの回答が良いのかなと思いましたが、一応、別解としてVecを使ったやり方を回答しました。
回答3件
あなたの回答
tips
プレビュー