如何获得阵列的位置而不重复位置?

时间:2013-01-13 14:28:47

标签: c# arrays random

我有一个数组的问题,我想得到位置的值,但不重复位置(使用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] + ", ");
       }

1 个答案:

答案 0 :(得分:0)

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

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

var indexes = Enumerable.Range(0, caminohormiga.Length).ToArray();
// Run Fisher-Yates algorithm on indexes
...
foreach (var i in indexes) {
    var randomNoRepeat = caminohormiga[i];
    ...
}