3

Enumerable モジュールを、コレクションの要素をランダムな順序で返す新しい反復子で拡張する必要があります。コレクションに関する唯一の情報 - それはそれぞれに対応します。要素に関するその他の仮定はありません。解決策があります-要素を配列にラップしてから、サンプルメソッドを使用します:

def each_permuted
    tmp = []
    self.each do |w|
        tmp << w
    end
    tmp.sample(tmp.length).each do |w|
        yield w
    end
end

ここではコレクションを 2 回 (tmp.sample のランダム順列を数えると 3 回も) 処理するため、気に入らないことがあります。1回の通過で可能ですか?

4

2 に答える 2

0
def each_permuted &pr; shuffle.each(&pr) end
于 2013-04-02T11:41:20.727 に答える