У меня есть массив некоторых определенных целых, и я хочу найти все уникальные комбинации (путем добавления) этих целых. Я уверен, что есть способ сделать это функционально; Я пытаюсь избежать итеративного способа добавления циклов внутри циклов for. Я использую Rust в этом случае, но этот вопрос, в общем, "функциональное программирование, как?" брать.
Моя первая мысль: мне нужно просто сжать каждую запись в v
с каждой другой записью, сократить их путем добавления к одному элементу и отфильтровать дубликаты. Это O (| v | ^ 2), который плохо себя чувствует, а это означает, что я, вероятно, упускаю что-то довольно очевидное для функциональных одаренных детей. Кроме того, я даже не уверен, как это сделать, я, вероятно, использовал бы для l oop для создания моего нового массивного массива.
Мой первый проход: обратите внимание, что v
содержит все числа, которые я забота о.
let mut massive_arr = Vec::new();
for &elem in v.iter(){
for &elem2 in v.iter(){
massive_arr.push((elem,elem2));
}
}
let mut single_massive = Vec::new();
for &tuple in massive_arr.iter(){
single_massive.push(tuple.0 + tuple.1);
}
single_massive.dedup();
let summand: usize = single_massive.iter().sum(); println!("The sum of all that junk is {:?}", summand);```
Помогите мне крестить мои испорченные итерации в чистом свете функционального программирования.
отредактировано: Я приводил пример прежде, как я все еще был выяснение реализации, которая действительно работала, и вопрос был скорее в том, как мне сделать этот лучший вопрос. То, что выше, сейчас действительно работает (но все еще ужасно!).