1

K <= N である N 項目配列のすべての K 項目の組み合わせを取得する最短の方法は何ですか? 以下のものを書き留めることができました:

 > [1,2,3].instance_eval "(1..size).flat_map {|i| self.combination(i).to_a }"

=> [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]

「instance_eval」を取り除く方法はありますか? あまりエレガントではないようです :\

4

4 に答える 4

2

順序/空のリストが問題にならない場合、「パワーセット」関数を実装するクールで短い方法を次に示します。

>>> [nil].product(*[1, 2, 3].map { |x| [nil, x] }).map(&:compact)
[[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
于 2015-07-14T20:52:48.573 に答える