2016-09-27 14 views
1

私はGroovyを初めて使用しているので、これはちょっとした質問であるとお詫び申し上げます。リストから選択したものよりも多くの選択肢をランダムに選択

私は50アイテムのリストを持っており、すべて1〜50のID番号で識別されています。私はランダムにこのリストから選択することができるようにしたいリストより多くの時間がある(今は122ですが、それよりも潜在的に何回も)です。私が試してみました現在のコードは次のようになります。

list.shuffle.next(122).each {} 

私は全体来ている問題は、私はリスト(50)内の数字を持っているように括弧の中に作成アクションは唯一の回数を反復することです。 50回、50回、次に22回(各項目が少なくとも2回から3回以上選択される)のアクションではなく、本当にランダムな選択方法が好まれます。

これを書き込むにはどうすればよいですか?

ありがとうございました!

+0

すでにhttps://groovy-playground.appspot.com/、ここでそれを共有で試みられてきたものの一例を作成してみてください。 – TylerY86

答えて

1

リスト内のランダムな要素を選択するjava.util.Randomを使用することができます終わり

List<Object> list = new ArrayList<>(); //fill this list with objects 
List<Object> results = new ArrayList<>(); //results will be saved in here 
Random rng = new Random(); //a new random number generator 
int i = 0; 
while (i++ < 100) { 
    int randomIndex = rng.nextInt(list.size()); //random index in the list 
    Object result = list.get(randomIndex); 
    results.add(result); 
} 

は、resultsで100の結果、ランダムにlistから選ばがあるでしょう。

明らかに、このコードは空のリストでは機能しません。IndexOutOfBoundsExceptionを投げます。

+0

驚くばかり、私はこれを撃つだろう。ありがとう! – Matt

+0

Java構文が好きですか? – TylerY86

4

Here's a groovy way to do it.

// list of integers 1 to 50 
def list = 1..50 

// where you're going to store your picks from 
def selection = [] 

// what you're going to pick 
def random = new Random() 

// 0 to 121 is 122 items 
(0..121).each { 
    // pick from the list at random 
    selection << list[ random.nextInt(list.size()) ] 
} 
関連する問題