【问题标题】:Compare element order of two string list比较两个字符串列表的元素顺序
【发布时间】:2015-01-04 00:45:47
【问题描述】:

我有第一个字符串列表:

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

我有第二个字符串列表:

"NATIONALITY"
"LASTYEAR"
"FILTER"

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

例子:

"NATIONALITY"
"LASTYEAR"
"FILTER"

必须返回 TRUE 并且

"LASTYEAR"
"NATIONALITY"
"FILTER"

必须返回 FALSE,因为根据第一个列表,“NATIONALITY”必须在“LASTYEAR”之前

我尝试使用每个元素的“IndexOf”获取索引,但我不知道如何有效地比较它们。

在这种情况下使用自定义比较器(实现 IComparer)是一个好的解决方案吗?如果是怎么办?使用 Enum 来实现这种比较会更好吗?

需要帮助提前谢谢

【问题讨论】:

    标签: c# .net linq comparison


    【解决方案1】:

    您可以使用Intersect 获取列表之间的交集,然后使用SequenceEqual 方法检查该序列是否与list2 相同:

    list1.Intersect(list2).SequenceEqual(list2);
    

    【讨论】:

    • 我不确定Enumerable.Intersect 是否保持元素的顺序。但根据这篇文章,它确实如此:Preserving order with LINQ.
    【解决方案2】:

    我首先过滤第一个列表,使其仅包含第二个列表中包含的项目。

    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;
    

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多