複数のエントリを一度にHashMapに挿入する方法はありますか?
はい、あなたはこのように、Iterator
からの値でHashMap
をextend
ことができます。extend
がで提供サイズのヒントを使用しているため、
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
map.extend((1..3).map(|n| (format!("{}*2=", n), n * 2)));
map.extend((7..9).map(|n| (format!("{}*2=", n), n * 2)));
println!("{:?}", map); // Prints {"1*2=": 2, "8*2=": 16, "7*2=": 14, "2*2=": 4}.
}
それは、少し速く手動insert
を呼び出すよりも、ありますIterator
に事前にスペースを確保してください。
メソッドhere, in map.rsのソースコードを確認してください。
複数のエントリで初期化するにはどうすればよいですか?
FromIterator
形質を実装するHashMap
のおかげでこれも可能です。コレクションにFromIterator
が実装されている場合は、Iterator::collect
の省略形を使用してコレクションを構築できます。
use std::collections::HashMap;
fn main() {
let mut map: HashMap<_, _> = (1..3).map(|n| (format!("{}*2=", n), n * 2)).collect();
map.extend((7..9).map(|n| (format!("{}*2=", n), n * 2)));
println!("{:?}", map); // Prints {"1*2=": 2, "8*2=": 16, "7*2=": 14, "2*2=": 4}.
}
use std::collections::HashMap;
fn main() {
let map: HashMap<_, _> = (1..3)
.chain(7..9)
.map(|n| (format!("{}*2=", n), n * 2))
.collect();
println!("{:?}", map); // Prints {"1*2=": 2, "8*2=": 16, "7*2=": 14, "2*2=": 4}.
}
use std::collections::HashMap;
use std::iter::FromIterator;
fn main() {
let iter = (1..3).chain(7..9).map(|n| (format!("{}*2=", n), n * 2));
let map = HashMap::<String, u32>::from_iter(iter);
println!("{:?}", map); // Prints {"1*2=": 2, "8*2=": 16, "7*2=": 14, "2*2=": 4}.
}
[私は文字通りのHashMapを作成するにはどうすればよい?]の
可能な複製(します。https:// stackoverflowのそれらのすべてが同じマップを生成し、次の例を考えてみましょう.com/questions/27582739/how-do-i-create-a-hashmap-literal) – JAL
あなたはこれを望む理由を説明できますか?何度も "挿入"するのを避けようとしていますか? (もしそうなら、ハッシュマップリテラルマクロクレートがあります)。ハッシュマップのサイズ変更を避けようとしていますか? (もしそうなら、それを 'with_capacity'で初期化することができます)ランタイムを通る往復を避けようとしていますか? (もしそうなら、私はそれを心配しないように言いますが、それはPythonやJavaScriptのように実際には存在しません。)2つのハッシュマップをマージするために必要なコードを短くしようとしていますか? ? –
* 1つの要素ごとに手動でinsertを呼び出す以外* *可能です。ループを使用して、手動で 'insert 'を1回だけ呼び出すことができます。 – Shepmaster