【问题标题】:I want to create multidimensional Array with different random numbers我想用不同的随机数创建多维数组
【发布时间】:2018-05-01 18:42:18
【问题描述】:

我要创建多维数组with Random r = new Random();

每个元素都应该是随机生成的,而且它们都必须是不同的元素。它们都不应该是相同的。我也不能使用任何功能。

这里是数组,但有相同的元素。 我希望所有的元素都不同。

   for (int i=0; i<3; i++)
        {
            for(int j=0; j<4; j++)
            {
                arr[i, j] = rand.Next(1,25);
            }
        }

【问题讨论】:

  • “每个元素都应该随机生成,但必须有所有不同的元素”是矛盾的。也许您正在寻找shuffle
  • 根据您的代码,只有 25 个可能的数字。您可以创建一个包含所有 25 个的 List&lt;int&gt;,然后随机排列列表,然后通过从列表中获取一个接一个的数字来填充您的数组。
  • 那么,每当你创建一个新的随机元素时,检查它是否已经存在,如果存在,就生成一个新的代替吗?
  • @DavidRector 这几乎是正确的洗牌:en.wikipedia.org/wiki/…
  • @DavidRector 对不起,这对我来说含糊不清。我不是指 RNG 偏见。当您迭代和交换时,您需要在当前位置 之后选择一个随机位置。请参阅该链接的实施错误下的第二段。

标签: c# arrays algorithm random


【解决方案1】:

在惰性版本中,可以将 1D shuffled 数组复制到 2D 数组:

Random rand = new Random();
int[] shuffled = Enumerable.Range(1, 25).OrderBy(rand.Next).ToArray();

int[,] arr = new int[3, 4];
Buffer.BlockCopy(shuffled, 0, arr, 0, arr.Length * sizeof(int));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2014-05-25
    相关资源
    最近更新 更多