Iterable
(または)を「シャッフル」して、Sequence
要素がその後ランダムに並べられるようにする方法はありCollections.shuffle()
ますか? Iterable
、Collection
、およびの API ドキュメントを調べましたが、Sequence
関連するものは見つかりませんでした。(補足:ceylon.language::shuffle
紛らわしい名前です)
私は自分でシャッフルを実装できると思いますが、怠惰になろうとして忙しいです:-)
Iterable
(または)を「シャッフル」して、Sequence
要素がその後ランダムに並べられるようにする方法はありCollections.shuffle()
ますか? Iterable
、Collection
、およびの API ドキュメントを調べましたが、Sequence
関連するものは見つかりませんでした。(補足:ceylon.language::shuffle
紛らわしい名前です)
私は自分でシャッフルを実装できると思いますが、怠惰になろうとして忙しいです:-)
ここで最後の「インサイドアウト」アルゴリズムに基づいて、独自の実装を行いました。
[Element*] shuffle<Element>({Element*} input) {
value newList = LinkedList<Element>();
for(el in input){
value j = math.randomInteger {lowerBound=0; upperBound=newList.size; inclusiveUpperBound=true;};
if(j == newList.size){
newList.add(el);
} else {
value elementToMove = newList[j];
assert(exists elementToMove);
newList.add(elementToMove);
newList.set(j, el);
}
}
return newList.sequence;
}
正しさはまだ検証していません。私は math.randomInteger も実装しましたが、これはおそらく実装で推測できます。