比较两个字符串列表的元素顺序
Compare element order of two string list
我有第一个字符串列表:
"GENRE",
"NATIONALITY",
"PRODUCTION",
"FIRSTYEAR",
"LASTYEAR",
"FILTER"
我有第二个字符串列表:
"NATIONALITY"
"LASTYEAR"
"FILTER"
我想检查第二个列表中的元素(即使缺少某些元素)是否与第一个列表的顺序相同。
示例:
"NATIONALITY"
"LASTYEAR"
"FILTER"
必须return TRUE 并且
"LASTYEAR"
"NATIONALITY"
"FILTER"
必须 return FALSE 因为根据第一个列表 "NATIONALITY" 必须在 "LASTYEAR" 之前
我试图用每个元素的 "IndexOf" 获取索引,但我不知道如何有效地比较它们。
在这种情况下使用自定义比较器(实现 IComparer)是否是一个好的解决方案?如果是怎么办?是不是用Enum来实现比较更好?
需要帮助提前致谢
我首先过滤第一个列表,使其仅包含第二个列表中包含的项目。
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;
您可以使用 Intersect
获取列表之间的交集,然后使用 SequenceEqual
方法检查该序列是否与 list2
:
相同
list1.Intersect(list2).SequenceEqual(list2);
我有第一个字符串列表:
"GENRE",
"NATIONALITY",
"PRODUCTION",
"FIRSTYEAR",
"LASTYEAR",
"FILTER"
我有第二个字符串列表:
"NATIONALITY"
"LASTYEAR"
"FILTER"
我想检查第二个列表中的元素(即使缺少某些元素)是否与第一个列表的顺序相同。
示例:
"NATIONALITY"
"LASTYEAR"
"FILTER"
必须return TRUE 并且
"LASTYEAR"
"NATIONALITY"
"FILTER"
必须 return FALSE 因为根据第一个列表 "NATIONALITY" 必须在 "LASTYEAR" 之前
我试图用每个元素的 "IndexOf" 获取索引,但我不知道如何有效地比较它们。
在这种情况下使用自定义比较器(实现 IComparer)是否是一个好的解决方案?如果是怎么办?是不是用Enum来实现比较更好?
需要帮助提前致谢
我首先过滤第一个列表,使其仅包含第二个列表中包含的项目。
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;
您可以使用 Intersect
获取列表之间的交集,然后使用 SequenceEqual
方法检查该序列是否与 list2
:
list1.Intersect(list2).SequenceEqual(list2);