2016-09-27 85 views
1

我是Groovy的新手,所以我很抱歉如果這是一種noob問題。從列表中隨機選擇比列出的項目更多的選項

我有一個項目列表50長,他們都是由1-50的ID號標識。我希望能夠從列表中隨機選擇以上的次數,比我在列表(122次,但可能比此次數更多)中列出的次數多。當前的代碼我已經試過是:

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

我來了對面的問題是,括號內創建的操作只會重複的次數,因爲我在列表(50)有一個數字。與其先做50次,再做50次,然後做22次(其中每個項目至少選兩次,不超過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); 
} 

在年底,將有100個結果中results,從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()) ] 
}