3

Iterable(または)を「シャッフル」して、Sequence要素がその後ランダムに並べられるようにする方法はありCollections.shuffle()ますか? IterableCollection、およびの API ドキュメントを調べましたが、Sequence関連するものは見つかりませんでした。(補足:ceylon.language::shuffle紛らわしい名前です)

私は自分でシャッフルを実装できると思いますが、怠惰になろうとして忙しいです:-)

4

3 に答える 3

0

ここで最後の「インサイドアウト」アルゴリズムに基づいて、独自の実装を行いました。

[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 も実装しましたが、これはおそらく実装で推測できます。

于 2013-12-10T06:37:27.177 に答える