Помимо существующих ответов, подход более высокого уровня также может быть чище (в зависимости от вкуса)
let mut numbers = [None; 5];
for (i, n) in numbers.iter_mut().enumerate() {
let iter = i as u16;
let number_to_add: u16 =
((iter * 5) + 2) / (4 * 16);
*n = Some(number_to_add);
}
Другой альтернативой может быть более ленивый подход, но (afaik) нет способа например, try_collect
в массив, только try_from
срез в массив, так что вам нужно будет собрать () в ve c, затем try_from
в массив, что кажется менее чем полезным. Хотя вы всегда можете использовать итератор для инициализации массива:
let mut it = (0u16..5).map(|i| ((i * 5) + 2) / (4 * 16));
let numbers = [it.next(), it.next(), it.next(), it.next(), it.next()];
Также
// `iter` moves to inner scope
iter
- это Copy
, так что это просто ... скопировано. Своего рода. И блок также бесполезен, он содержит только простое выражение.