检查字符串列表中是否存在字符串数组

时间:2013-02-14 21:59:34

标签: c# arrays string list

我有一个字符串数组列表。我通过迭代创建一个新的字符串数组并尝试将其放入列表中,但是当我使用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);
  }
}

4 个答案:

答案 0 :(得分: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 :(得分:1)

仍然效率不高但应该做到这一点:

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

答案 2 :(得分:1)

Contains方法依赖于其元素的Equals方法来查看它是否包含特定值。数组不会覆盖Equals的默认实现,因此如果数组是对同一对象的引用,则Contains只会认为数组等于列表中的数组(默认行为为{ {1}})。

要解决此问题,您可以使用Equals扩展方法以及Enumerable.Any()扩展方法:

SequenceEqual

答案 3 :(得分:1)

您可以使用Sequence equal方法比较两个字符串数组。

C#语言中System.Linq的SequenceEqual扩展,可以在一个语句中测试两个集合是否相等。

SequenceEqual

但其性能远远低于其他实施方式。

或实施您自己的等于功能

List.Contains Method