1

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

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

4 回答 4

4
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);
于 2013-02-14T22:13:41.533 回答
1

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

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

序列相等

但它的性能比替代实现差得多。

或实现您自己的 Equals 函数

List.Contains 方法

于 2013-02-14T22:10:55.100 回答
1

仍然不是很有效,但应该可以解决问题:

if (!possibleColumnValues.Any(rArr.SequenceEqual))
{
    possibleColumnValues.Add(rArr);
}
于 2013-02-14T22:07:00.910 回答
1

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

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

if (!possibleColumnValues.Any(item.SequenceEqual))
{
    possibleColumnValues.Add(rArr);
}
于 2013-02-14T22:09:30.877 回答