2010-11-19 189 views
0

我想获得1之间20张随机数到100,但次数不宜重复....如何获得随机数

更新时间: 如果我有20名,其中任何5成随机选择一个一个,但名称来了一次不再被称为.....

+7

这不是随机的。随机序列_do_有重复的数字。你能澄清吗? – Oded 2010-11-19 15:37:19

+2

这不是随机的,但它对于某些事情仍然有用(例如,随机播放专辑中的歌曲而没有任何重复)。 – dicroce 2010-11-19 15:38:28

+1

你想随机洗牌,谷歌渔民。 – 2010-11-19 15:38:41

回答

7

把号码列表,从列表中挑选:

List<int> numbers = Enumerable.Range(1, 100).ToList(); 

Random rnd = new Random(); 
List<int> picks = Enumerable.Range(1, 20).Select(n => { 
    int index = rnd.Next(numbers.Count); 
    int pick = numbers[index]; 
    numbers.RemoveAt(index); 
    return pick; 
}); 

这可能是解决这个问题的最简单的方法,但它是不是最有效的。删除列表中的项目涉及移动以下项目。使用更多的代码可以避免这种情况,但对于大多数用途而言,代码足够好。