2013-03-09 16 views
0

我有一個int陣列,大小爲8。我想要做的是通過array搜索對(例如,如果索引0上的數字與索引5上的數字相同)。在陣列中搜索配對

我試過做兩個數組(第二個是第一個副本),但沒有意義,因爲所有東西都是成對的。

然後我試着做半陣,所以我做了兩個尺寸爲4arrays並比較它們。這並沒有解決對可以在單個數組中。

填寫array我使用的是隨機數,隨機數的最大值大小爲array(8)

+1

目前還不清楚你是否經過特定匹配(在這種情況下,我希望索引5而不是4)或者只是*任何*重複。 – 2013-03-09 11:46:28

回答

0

如果您有一個小的最大值,您可以初始化這個長度的位數組。瀏覽你的原始數組併爲每個成員設置合適的位數組。如果在這個位置的位數組是真的,那麼你有一對。如果你想要特定的位置,使用int數組。
嘗試是這樣的:

BitArray bucket = new BitArray(<<your max value>>); 
foreach(int i in originalArray) 
{ 
if(bucket[i]) return true; 
bucket[i] = true; 
} 
1

您可以使用LINQ。

int[] array = new[] { 1, 2, 3, 1, 4, 5, 6, 7, 8, 8 }; 
var duplicates = array 
    .GroupBy(i => i) 
    .Where(g => g.Count() > 1) 
    .Select(g => g.Key); 
foreach (var d in duplicates) 
    Console.WriteLine(d); 
0

如果您想獲得不僅值列表,是重複的,又哪裏,價值觀發生了,你可以使用LINQ到對象的查詢索引:

int[] items = new[] { 1, 2, 3, 1, 4, 5, 3, 7 }; 

var duplicates = items.Select((e, i) => new { e, i }) 
         .GroupBy(i => i.e) 
         .Where(g => g.Count() > 1) 
         .Select(g => new { Value = g.Key, Indexes = g.Select(e => e.i).ToList() }) 
         .ToList(); 

duplicates包含2元素,具有以下內容:

enter image description here

0

可以創建一個詞典(如字典[I] ==> AR索引

var dubs = array.Select((i, inx) => new { i, inx }) 
      .GroupBy(x => x.i) 
      .ToDictionary(g => g.Key, g => g.Select(y => y.inx).ToList()); 
0

傳統的方式找到對射線是到陣列(方法A,下文)進行排序。另一種方法是有兩個嵌套循環(方法B)。

Tell("Method A..."); 
int[] a = new int[]{3, 1, 4, 1, 5, 9, 5, 5}; 
int lengthA = a.Length; 
Array.Sort(a); 
for (int i = 1; i < lengthA; i++) 
{ 
    if (a[i-1] == a[i]) 
    { 
    Tell("Method A Found pair in a: "+a[i-1]+" and "+a[i]); 
    } 
} // for i 

Tell("Method B..."); 
int[] b = new int[]{3, 1, 4, 1, 5, 9, 5, 5}; 
int lengthB = b.Length; 
for (int i = 0; i < lengthB-1; i++) 
{ 
    for (int j = i+1; j < lengthB; j++) 
    { 
    if (b[i] == b[j]) 
    { 
     Tell("Method B Found a pair in b: "+b[i]+" and "+b[j]); 
    } 
    } // for j 
} // for i 

這裏是輸出...

  • 方法A ...
  • 方法A實測值對:1和1
  • 方法A實測值對在:5和5以
  • 方法A實測值對:5,5
  • 方法b ...
  • 方法b實測值b中的一對:1個1
  • 方法B發現在B A對:5,5
  • 方法B發現在B A對:5,5
  • 方法B發現在B A對:5,5

我希望你能明白爲什麼方法B比方法A報告更多的對。