- itertoolsクレートを使用する方法:
itertoolsクレートには、順列を生成するための便利な関数が用意されています。まず、Cargo.tomlファイルに以下の依存関係を追加します:
[dependencies]
itertools = "0.10"
次に、以下のコードを使用して順列を生成します:
use itertools::Itertools;
fn main() {
let items = vec![1, 2, 3];
let permutations = items.into_iter().permutations(3);
for permutation in permutations {
println!("{:?}", permutation);
}
}
このコードでは、into_iter()
メソッドを使用して順列を生成し、permutations()
メソッドで要素数を指定します。生成された順列はイテレータとして返されます。
- 自作の再帰関数を使用する方法:
順列を再帰的に生成する関数を独自に実装することもできます。以下に例を示します:
fn permutations<T: Clone>(items: &[T], permutation: &mut Vec<T>, result: &mut Vec<Vec<T>>) {
if items.is_empty() {
result.push(permutation.clone());
} else {
for (i, item) in items.iter().enumerate() {
permutation.push(item.clone());
let mut remaining = items.to_vec();
remaining.remove(i);
permutations(&remaining, permutation, result);
permutation.pop();
}
}
}
fn main() {
let items = vec![1, 2, 3];
let mut result = Vec::new();
permutations(&items, &mut Vec::new(), &mut result);
for permutation in result {
println!("{:?}", permutation);
}
}
このコードでは、再帰関数permutations
を使用して順列を生成します。順列はresult
ベクタに格納され、最終的に出力されます。
これらのコード例を使用することで、Rustで順列を生成し、様々な方法で利用することができます。この記事を参考にして、さまざまなシナリオで順列を活用してみてください。