【发布时间】:2020-06-14 21:59:26
【问题描述】:
我正在尝试随机化二维数组中的一组预定元素。
using System;
namespace array
{
public class tiles
{
static void Main(string[] args)
{
Random random = new Random();
int[,] tilearr = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(tilearr[i, j] + " ");
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
我的问题是,如果我执行 tilearr[i, j] = random.Next(0, 8); 之类的操作,它会随机化数组,但不关心是否存在相同元素的任何重复项。
2 6 7
1 1 3
2 7 0
我所追求的更像是这样的:
2 4 8 1 3 0
0 3 1 5 6 8
6 7 5, 2 4 7
【问题讨论】:
-
Shuffle 改为值
-
您想随机化数组但不重复?
-
如果您不想重复,您希望以随机顺序放置一组值(或项目)。这叫做 shuffle,这里有成千上万的帖子
-
这是来自 xanatos 的一个很棒的答案:stackoverflow.com/questions/30164019/…
-
一个非常简单的洗牌算法是这样的:“指向”最后一个元素。现在在此之前随机选择一个元素。交换这两个元素。然后“指向”倒数第二个元素并在此之前随机选择一个元素并切换这两个元素。依此类推,直到您“指向”第一个元素。