Для изменения существующей структуры данных использование явного цикла является наиболее идиоматичным способом сделать это:
for (i, arg) in args.iter().enumerate() {
for (j, value) in arg.split(' ').enumerate() {
match value.parse() {
Ok(x) => {
grid[i][j] = x;
}
Err(e) => {
eprintln!("Value {} is not a valid integer [{}]", value, e);
exit(1);
}
}
}
}
Вы можете написать это с помощью Iterator::for_each
, но это вряд ли будет рассматриваться "лучше "большинством разработчиков Rust:
args.iter().enumerate().for_each(|(i, arg)| {
arg.split(' ')
.enumerate()
.for_each(|(j, value)| match value.parse() {
Ok(x) => {
grid[i][j] = x;
}
Err(e) => {
eprintln!("Value {} is not a valid integer [{}]", value, e);
exit(1);
}
})
});
Независимо от того, что вы используете, вы определенно не должны собирать все те Vec
s, которые затем выбрасываете.