@iihaarr

Возможно ли собрать данные из итератора в уже созданный буфер?

Есть такой код:
let arr: [i32; 10] = [1,2,3,4,5,6,7,8,9, 10];
    let mut arr2: [i32; 10] = [0; 10];
    
    let mut count = 0;
    for el in arr {
        if el % 2 == 0 {
            arr2[count] = el;
            count += 1;
        }
    }

Можно ли его переписать в функциональном стиле без создания дополнительного буфера? Я нашел в трейте Iterator есть collect_into, но он только в nightly
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
bingo347
@bingo347
Crazy on performance...
let arr: [i32; 10] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let mut arr2: [i32; 10] = [0; 10];

arr.iter()
    .zip(arr2.iter_mut())
    .filter(|(el, _)| **el % 2 == 0)
    .for_each(|(el, target)| {
        *target = *el;
    });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@historydev
Валера, настало твоё время
Судя по коду и как я понял твою белиберду, что-то вроде этого:

let arr: [i32; 10] = [1,2,3,4,5,6,7,8,9, 10];
let mut arr2: [i32; 10] = [0; 10];

arr.iter().enumerate().for_each(|(i, n)| if i % 2 == 0 { arr2[i] = *n; });

println!("{arr2:?}");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы