0

我有一个数组的问题,我想获得位置的值,但不重复位置(使用 next.random 值重复,但我需要一次获得位置),我发布我的代码让你看到它们。我希望你能帮助我。

  int d = 0;   

  for (int i = 0; i < caminohormiga.Length; i++)
       {
          int start2 = random.Next(0, caminohormiga.Length);

          d = caminohormiga[start2];
          MatrizAux[i] = d;

          if (caminohormiga[i] == 0)
             {
              Console.Write("Repetido");
             }
         Console.Write(caminohormiga[i] + ", ");
       }
4

1 回答 1

0

您需要创建一个索引数组,用零到长度减一的数字填充它,进行随机洗牌,然后通过洗牌后的数组来选择原始数组的索引。

您可以使用Fisher-Yates Shuffle 算法重新排列索引。

var indexes = Enumerable.Range(0, caminohormiga.Length).ToArray();
// Run Fisher-Yates algorithm on indexes
...
foreach (var i in indexes) {
    var randomNoRepeat = caminohormiga[i];
    ...
}
于 2013-01-13T14:30:20.147 回答