我使用Linq将一个随机数生成器放在一起。在这种情况下,这些随机数的范围必须为1-6(含1-6)。我想选择3个不同数字组成的组。
我不明白为什么这段代码会返回仅包含2个数字的组。
do
{
Random rnd = new Random();
int[] myRndNos = Enumerable
.Range(1, 6)
.Select(i => rnd.Next(1, 7))
.Distinct()
.Take(3)
.ToArray();
string test = string.Join(",", myRndNos);
System.Console.WriteLine(test);
Console.ReadKey(true);
} while (true);
Run Code Online (Sandbox Code Playgroud)
它返回一个示例,如:
4,6,1
5,2,3
2,4,5
3,2
3,5,1
etc...
Run Code Online (Sandbox Code Playgroud)
为什么在某些情况下只取两个数字?对我来说没有意义。发射
您正在生成6个随机数,但是如果这些数字恰好是重复的,则唯一性将消除它们,从而仅留下唯一值列表,如果只有2个唯一项,那么您将获得全部。
因为您想要3个不同的数字,所以我认为您所追求的是洗牌。
private static Random rnd = new Random();
int[] myRndNos = Enumerable.Range(1, 6).OrderBy(i => rnd.Next()).Take(3).ToArray();
Run Code Online (Sandbox Code Playgroud)
要么
private static Random rng = new Random();
int[] myRndNos = Enumerable.Range(1, 6).Shuffle();
public static void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
算法来源:将List <T>随机化
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |