2012-10-25 81 views
8

對不起,新手問題。有人可以幫我嗎?這裏簡單的數組。什麼是檢查所有用戶輸入的最好/最簡單的方法是唯一的,而不是重複的?由於如何檢查此數組中的重複答案? c#

private void btnNext_Click(object sender, EventArgs e) 
    { 

     string[] Numbers = new string[5]; 


     Numbers[0] = txtNumber1.Text; 
     Numbers[1] = txtNumber2.Text; 
     Numbers[2] = txtNumber3.Text; 
     Numbers[3] = txtNumber4.Text; 
     Numbers[4] = txtNumber5.Text; 


     foreach (string Result in Numbers) 
     { 
      lbNumbers.Items.Add(Result); 
     } 

     txtNumber1.Clear(); 
     txtNumber2.Clear(); 
     txtNumber3.Clear(); 
     txtNumber4.Clear(); 
     txtNumber5.Clear(); 
    } 
} 

}

我應該補充,我需要檢查發生之前的數字輸出。由於

+0

下圖顯示的答案你如何在將它們添加到lbNumbers.Items後檢查。你也可以檢查你在foreach中添加它們。 –

回答

15

一個簡單的方法是通過LINQ:

bool allUnique = Numbers.Distinct().Count() == Numbers.Length; 
+0

嗨。我用這個,它總是返回false。我用錯了嗎? – Rob

+0

我的意思是,我設置了這個,然後添加if(allUnique == true)然後它顯示,如果沒有,那麼它彈出一條消息詢問唯一的數字。這是不是正確的方式來使用它? – Rob

+0

我得到了這個工作。謝謝喬恩。 – Rob

1

最簡單的方式,在我看來,將是插入一組內的所有值,然後檢查其大小等於陣列的大小爲。一個集合不能包含重複值,所以如果任何值重複,它將不會被插入到集合中。

如果您沒有數百萬個值,那麼複雜度也是可以的,因爲插入集合的時間爲O(logn)時間,因此總檢查時間將爲O(nlogn)

如果你想要的東西的複雜性最佳,您可以通過數組去做到這一點的O(n)時間,將發現到一個哈希地圖每個值,同時增加它的價值:如果值不存在集,你用count = 1加它。如果它存在,你增加它的計數。 然後,你通過哈希映射並檢查所有值都有一個計數爲

2

另一種方法是使用HashSet<string>

var set = new HashSet<string>(Numbers); 
if (set.Count == Numbers.Count) 
{ 
    // all unique 
} 

Enumerable.All

var set = new HashSet<string>(); 
// HashSet.Add returns a bool if the item was added because it was unique 
bool allUnique = Numbers.All(text=> set.Add(text)); 

Enunmerable.All更有效時的順序是非常大的,因爲它不會創建設置完全而是一個後彼此一旦發現重複,將立即返回false

下面是這個效果演示:http://ideone.com/G48CYv

  • HashSet構造內存消耗:50 MB,持續時間:00:00:00.2962615
  • Enumerable.All內存消耗:0 MB,持續時間:00:00:00.0004254

MSDN

HashSet<T>類提供高性能的集合操作。 一個集合是一個不包含重複元素的集合,其元素的排列順序不是特定的。

1

如果你只是想確保你的列表框不具備的DUP然後使用此:

if(!lbNumbers.Items.Contains(Result))  
    lbNumbers.Items.Add(Result); 
0

這個怎麼樣:

public bool arrayContainsDuplicates(string[] array) { 
    for (int i = 0; i < array.Length - 2; i++) { 
    for (int j = i + 1; j < array.Length - 1; j++) { 
     if (array[i] == array[j]) return true; 
    } 
    } 
    return false; 
} 
+0

警告如果有人使用此代碼:其結果是無效的,我的嘗試糾正它被拒絕(理由:我的「編輯偏離了原來的意圖,甚至編輯,必須使劇烈變化應該努力保持崗位所有者的目標「)。 –