我有一个字符串数组列表。我通过迭代创建一个新的字符串数组并尝试将其放入列表中,但是当我使用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);
}
}
答案 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扩展,可以在一个语句中测试两个集合是否相等。
但其性能远远低于其他实施方式。
或实施您自己的等于功能