2013-02-14 199 views
1

我有一個字符串數組列表。我通過迭代創建了一個新的字符串數組,並嘗試將其放入列表中,但它不檢查當我使用contains函數時是否存在,而是插入重複項。檢查字符串數組是否存在於字符串列表中

List<string[]> possibleColumnValues = new List<string[]>(); 

while(true){ 

    string[] rArr = new string[5]; 
    //some code to populate the string goes here 

    if (!possibleColumnValues.Contains(rArr){ 
    { 
     possibleColumnValues.Add(rArr); 
    } 
} 

回答

3
private static bool AllElementInList(List<string[]> list, string[] arr) 
{ 
    return list.Select(ar2 => arr.All(ar2.Contains)).FirstOrDefault(); 
} 

使用它作爲:

 List<string[]> list = new List<string[]>(); 
     string[] arr; 

     bool flag = AllElementInList(list, arr); 
1

仍不是很有效的,但應該做的伎倆:

if (!possibleColumnValues.Any(rArr.SequenceEqual)) 
{ 
    possibleColumnValues.Add(rArr); 
} 
1

Contains方法依賴於它的元素的Equals方法,看它是否包含一個特定的值。數組不會覆蓋Equals的默認實現,因此Contains只會將數組視爲已在列表中的數組,如果它是對同一對象的引用(默認行爲Equals)。

要解決這一點,你可以使用Enumerable.Any()擴展方法與SequenceEqual擴展方法一起:

if (!possibleColumnValues.Any(item.SequenceEqual)) 
{ 
    possibleColumnValues.Add(rArr); 
} 
1

您可以使用序列等於方法兩個字符串數組進行比較。

從C#語言System.Linq的SequenceEqual擴展中,您可以在一個語句中測試兩個集合是否相等。

SequenceEqual

,但其性能比替代實現更糟。

或實現自己的equals功能

List.Contains Method

相關問題