ps4 - rust traduccion
Inicialización HashMap más concisa (1)
Puede utilizar iteradores para emular la comprensión del diccionario, por ejemplo,
let counts = "ACGT".chars().map(|c| (c, 0_i32)).collect::<HashMap<_, _>>();
o incluso for c in "ACGT".chars() { counts.insert(c, 0) }
.
Además, se puede escribir una macro para permitir una inicialización concisa de valores arbitrarios.
macro_rules! hashmap {
($( $key: expr => $val: expr ),*) => {{
let mut map = ::std::collections::HashMap::new();
$( map.insert($key, $val); )*
map
}}
}
utilizado como let counts = hashmap![''A'' => 0, ''C'' => 0, ''G'' => 0, ''T'' => 0];
.
Estoy usando un HashMap
para contar las ocurrencias de diferentes caracteres en una cadena:
let text = "GATTACA";
let mut counts: HashMap<char, i32> = HashMap::new();
counts.insert(''A'', 0);
counts.insert(''C'', 0);
counts.insert(''G'', 0);
counts.insert(''T'', 0);
for c in text.chars() {
match counts.get_mut(&c) {
Some(x) => *x += 1,
None => (),
}
}
¿Hay una forma más concisa o declarativa de inicializar un HashMap
? Por ejemplo en Python yo haría:
counts = { ''A'': 0, ''C'': 0, ''G'': 0, ''T'': 0 }
o
counts = { key: 0 for key in ''ACGT'' }