Я хотел создать функцию, которая возвращает структуру данных со всеми возможными комбинациями для определенной группы чисел: например: для [1, 2, 3]
возврат [[1], [2], [3], [1, 2], [2,1], ..., [1, 2, 3], [2, 1, 3], ...[3, 2, 1]]
.
Я понимаю, что c
и p
- это какой-то вектор &integer
, но я не могу найти способ сохранить их в массив или вектор. Я пытался сохранить его как вектор векторов, так как не думаю, что его можно сохранить как вектор массивов, поскольку массивы имеют разные размеры. Это также невозможно в виде массива векторов, поскольку я не знаю количество комбинаций в начале.
Как я могу сохранить все c
и p
в структуре данных, чтобы их можно было возвращать и использовать снаружи?
use permutator::{Combination, Permutation}; // 0.3.3
pub fn init() -> Vec<Vec<u32>> {
let actions: Vec<Vec<u32>>;
let mut data = &[1, 2, 3];
let mut counter = 1;
for i in 1..=data.len() {
data.combination(i).for_each(|mut c| {
println!("{:?}", c);
actions.push(c);
c.permutation().for_each(|p| {
println!("k-perm@{} = {:?}", counter, p);
counter += 1;
actions.push(p);
});
});
}
actions
}
Я получаю следующую ошибку:
error[E0308]: mismatched types
--> src/main.rs:10:26
|
10 | actions.push(c);
| ^ expected u32, found &{integer}
|
= note: expected type `std::vec::Vec<u32>`
found type `std::vec::Vec<&{integer}>`
error[E0308]: mismatched types
--> src/main.rs:14:30
|
14 | actions.push(p);
| ^ expected u32, found &{integer}
|
= note: expected type `std::vec::Vec<u32>`
found type `std::vec::Vec<&{integer}>`
edit: При попытке actions.push(c.iter().cloned().collect())
возвращается следующая ошибка:
error[E0277]: a collection of type `std::vec::Vec<u32>` cannot be built from an iterator over elements of type `&u32`
--> src/rl.rs:59:44
|
59 | actions.push(c.iter().cloned().collect());
| ^^^^^^^ a collection of type `std::vec::Vec<u32>` cannot be built from `std::iter::Iterator<Item=&u32>`
|
= help: the trait `std::iter::FromIterator<&u32>` is not implemented for `std::vec::Vec<u32>`