2012-02-02 112 views
0

相比基本上我有和大小不等的整數數組。我需要將每個號碼與其他號碼進行比較,並顯示重複的號碼。例如:整數數組整數VB.NET

Dim ints() As Integer = {1,2,2,5,4,6} 

顯示一次以上的數量爲2。

如何可以通過陣列上運行,並且每個整數與陣列中的數字進行比較。我嘗試了一個for循環,但它沒有返回我正在尋找的值。我是VB.NET新手,並不完全理解。

+0

你能爲循環添加?然後,我們可以提供什麼是不正確的提示。 – 2012-02-02 13:45:34

回答

1
Dim ints() As Integer = {1,2,2,5,4,6} 

Dim repeatedNumbers = ints.GroupBy(Function(intValue) intValue) _ 
          .Where(Function(grp) grp.Count > 1) 

For each grp in repeatedNumbers 
    Console.WriteLine("Number {0} is repeated {1} times", grp(0), grp.Count) 
Next 

這段代碼的含義:

  • 我們首先調用的GroupBy,這組項目通過自己的價值。函數獲取分組鍵,在這種情況下,我們只需按數組的值本身進行分組。該呼叫返回一組 組。數組中的每個唯一值都有一個組。 組包含與唯一值對應的所有項目。所以如果一個值在數組中出現兩次,將會有一個包含這個值的兩個整數的組。
  • 我們呼籲在哪裏篩選組。我們只需要計數大於1的組,以便只考慮重複值。
  • 我們再通過結果循環。 grp(0)爲我們提供了組中的第一個數字(我們可以選擇組中的任何數字,因爲組中的所有數字都是相同的!),Count屬性給我們重複的次數。
+0

感謝您的回覆,此解決方案效果最佳。我的問題是'Function(x)'和'Function(grp)'是什麼,我只是想確保我完全理解我得到的是什麼。 – 2012-02-02 16:02:48

+0

它們是lambda表達式,通常與GroupBy和Where等Linq函數一起使用。請檢查下面的MSDN鏈接lambda表達式:http://msdn.microsoft.com/en-us/library/bb531253.aspx – 2012-02-02 16:34:18

+0

我還編輯了答案,試圖解釋代碼做什麼。希望能幫助到你 – 2012-02-02 17:03:55

0

我會像這樣嘗試:

Dim ints() As Integer = {1, 2, 2, 5, 4, 6} 
    Array.Sort(ints) 
    For i = 1 To ints.GetUpperBound(0) 
     If ints(i) = ints(i - 1) Then MessageBox.Show(String.Format("{0} is repeated", ints(i))) 
    Next 

做這這樣的排序陣列上保留下來的嵌套。

我沒有測試這一點,但它應該是沿着正確的線路。

+1

不是一個錯誤的解決方案,但如果一個數字出現兩次以上,您將看到兩個或更多的消息。 – 2012-02-02 14:01:06

+0

我很簡單地開始工作,但是,你是對的,它可能更微妙。 – 2012-02-02 14:12:45

0

你可以使用LINQ找到重複:

Dim repeating = (From n In ints 
       Group By n Into Dups = Group 
       Where Dups.Count > 1 
       Select Dups.First).ToArray() 

這將返回只包含不在原始數組中唯一的數字整數數組。

因此,這顯示了重複號碼:

MessageBox.Show(String.Format("Duplicates found: {0}", String.Join(","c, repeating)))