@Legasy_gavno

Как сделать collect в кортеж?

ну короче, Я хотел так.
fn main() {
    let (a,b):(i32,i32)=vec![33,44].iter().map(|&a| a+5).collect();
    println!("{a} {b}");
}

и оказывается тут не как питоне и нужны не вектор[] а кортеж().
после этого копался гугле на англо язычных сайтах.
там тоже что то обсуждали но ответа не нашёл.
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Кортеж имеет фиксированный размер и по тому просто так collect сделать нельзя.
Тут тебе три варианта:
1. Вроде в itertools есть реализации collect для небольших гомогенных кортежей.
2. Делай collect в Vec и бери элементы из него
3. Сделай два раза next на итераторе

Код

раз
fn main() {
    let items = [1,2];
    let mut iter = items.into_iter().map(|x|5+x);
    let a = iter.next().unwrap();
    let b = iter.next().unwrap();
    println!("{a} {b}");
}


Два:
fn main() {
    let items = [1,2];
    let [a,b] = items.map(|x|5+x);
    println!("{a} {b}");
}


Три:
use itertools::Itertools; // 0.9.0

fn main() {
    let items = [1,2];
    let (a,b) = items.iter().map(|x|5+x).next_tuple().unwrap();
    println!("{a} {b}");
}

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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