2

This questionは、 sampleを使用して配列からランダムな要素を選択する方法について説明していますが、毎回一意の要素を選択して、これを複数回実行したいと考えています。

私が考えることができる最も簡単な解決策は次のようなものですが、(元の配列を変更せずに) もっと簡単な方法が必要だと思います:

myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]

selected = []

first = myArray.sample
selected << first

second = myArray.sample
while(selected.include? second) do
  second = myArray.sample
end

selected << second

編集:

私の特定のケースでは、すぐに次々と呼び出すわけではないので、サンプルで引数を使用しても役に立ちません

4

3 に答える 3

3

できるよ:

(myArray - selected).sample

例:

selected = ['ruby', 'goodies']

それから:

myArray - selected #=> ["stuff", "widget", "java", "emerald", "etc"]

したがって、 はsampleから取り出され["stuff", "widget", "java", "emerald", "etc"]ます。

于 2013-09-06T04:28:30.620 に答える
2

追加の引数 number を渡すsample(n)と、新しい配列が返されます

myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]
n = myArray.length

# The elements are chosen by using random and unique indices and doesn’t repeat itself 
selected = myArray.sample(n)

2 番目のオプションは、シードを使用することslice!ですrand

myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]
myArray_copy = myArray
selected = []

selected << myArray_copy.slice!(rand(myArray_copy.length - 1))
于 2013-09-06T03:52:35.197 に答える