比较两个字符串列表的元素顺序

时间:2015-01-03 16:34:17

标签: c# .net linq comparison

我有第一个字符串列表:

"GENRE",
"NATIONALITY",
"PRODUCTION",
"FIRSTYEAR",
"LASTYEAR",
"FILTER"

我有第二个字符串列表:

"NATIONALITY"
"LASTYEAR"
"FILTER"

我想检查第二个列表中的元素(即使缺少某个元素)是否与第一个列表的顺序相同。

示例:

"NATIONALITY"
"LASTYEAR"
"FILTER"

必须返回TRUE和

"LASTYEAR"
"NATIONALITY"
"FILTER"

必须返回FALSE因为" NATIONALITY"必须在之前" LASTYEAR"相应的第一个清单

我试图用" IndexOf"每个元素,但我不知道如何有效地比较它们。

在这种情况下使用Custom Comparer(实现IComparer)是否有利于解决方案?如果有,怎么样?使用Enum来实现这种比较是否更好?

需要提前帮助

2 个答案:

答案 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;