2013-01-13 78 views
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] + ", "); 
     } 
+1

'位置的值,但沒有重複職位'?我不明白這意味着什麼。 – Oded

+0

如果你正在使用隨機獲取職位,那麼你很可能會得到重複。你能包含更多的代碼嗎? – Stokedout

+0

所有好人......我似乎現在非常忙碌......我猜是好事!你還在嗎? – Stokedout

回答

0

你需要做索引的數組,填充它與數字通過長度減去一個零,使隨機洗牌,並經過洗牌後的陣列來接原數組的索引。

您可以使用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]; 
    ... 
} 
+0

我使用了Fisher-Yates Shuffle算法,並且非常感謝!!! – Shebystian