检查字符串列表中是否存在字符串数组
本文关键字:字符串 存在 数组 是否 列表 检查 | 更新日期: 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函数
列表。包含方法