2013-02-14 159 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

相关问题