More concise HashMap initialization
You can use iterators to emulate the dictionary comprehension, e.g.
let counts = "ACGT".chars().map(|c| (c, 0_i32)).collect::<HashMap<_, _>>();
or even for c in "ACGT".chars() { counts.insert(c, 0) }
.
Also, one can write a macro to allow for concise initialisation of arbitrary values.
macro_rules! hashmap {
($( $key: expr => $val: expr ),*) => {{
let mut map = ::std::collections::HashMap::new();
$( map.insert($key, $val); )*
map
}}
}
used like let counts = hashmap!['A' => 0, 'C' => 0, 'G' => 0, 'T' => 0];
.
Another way that I see in the official documentation:
use std::collections::HashMap;
fn main() {
let timber_resources: HashMap<&str, i32> =
[("Norway", 100),
("Denmark", 50),
("Iceland", 10)]
.iter().cloned().collect();
// use the values stored in map
}