我有第一个字符串列表:
"GENRE",
"NATIONALITY",
"PRODUCTION",
"FIRSTYEAR",
"LASTYEAR",
"FILTER"
我有第二个字符串列表:
"NATIONALITY"
"LASTYEAR"
"FILTER"
我想检查第二个列表中的元素(即使缺少某个元素)是否与第一个列表的顺序相同。
示例:
"NATIONALITY"
"LASTYEAR"
"FILTER"
必须返回TRUE和
"LASTYEAR"
"NATIONALITY"
"FILTER"
必须返回FALSE因为" NATIONALITY"必须在之前" LASTYEAR"相应的第一个清单
我试图用" IndexOf"每个元素,但我不知道如何有效地比较它们。
在这种情况下使用Custom Comparer(实现IComparer)是否有利于解决方案?如果有,怎么样?使用Enum来实现这种比较是否更好?
需要提前帮助
答案 0 :(得分:5)
您可以使用Intersect
获取列表之间的交集,然后使用SequenceEqual
方法检查该序列是否与list2
相同:
list1.Intersect(list2).SequenceEqual(list2);
答案 1 :(得分:1)
我首先过滤第一个列表,使其仅包含第二个列表中包含的项目。
var list1Filtered = list1
.Where(x => list2.Contains(x))
.ToList()
如果您确定第二个列表中包含的所有项目也包含在第一个列表中,并且它们在两个列表中都是唯一的,您可以放弃以下检查
if (list1Filtered.Count != list2.Count) {
return false;
}
现在很容易进行比较
for (int i = 0; i < list2.Count; i++) {
if (list2[i] != list1Filtered[i]) {
return false;
}
}
return true;