2016-09-27 89 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()) ] 
}