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

本文关键字:字符串 存在 数组 是否 列表 检查 | 更新日期: 2023-09-27 17:59:09

我有一个字符串数组列表。我通过迭代创建了一个新的字符串数组,并试图将其放入列表中,但当我使用contain函数时,它不会检查它是否存在,而是插入重复的字符串数组。

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);
  }
}

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

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);

仍然不是很有效,但应该做到:

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

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

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

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

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

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

序列相等

但它的性能比其他实现方式差得多。

或者实现您自己的Equals函数

列表。包含方法