【问题标题】:Any in-built method to only know if two lists are different?任何仅知道两个列表是否不同的内置方法?
【发布时间】:2011-06-24 01:20:00
【问题描述】:

我必须比较两个列表并且知道它们是否包含相同的值。我不打算对这些差异做任何事情。

在 C# 中实现这一目标的最佳方法是什么?

我知道我可以循环列表,但想知道是否有任何内置的 LINQ/扩展方法来实现这一点,从而提供更好的性能。尝试了除外/相交,但不知道它们是否最适合实现这一目标。

更新:列表中不会有任何重复项。

【问题讨论】:

    标签: c# linq generics collections comparison


    【解决方案1】:

    您想如何处理重复项?例如,您会将 { 2, 1, 1 } 视为与 { 1, 2 } 相同吗? (我假设顺序无关紧要......否则只需使用SequenceEqual。)

    假设您只有效地关心“集合”,这里有两种选择:

    一种快速而肮脏的方式:

    if (!list1.Except(list2).Any() && !list2.Except(list1).Any())
    

    一种更清洁的方式:

    var set = new HashSet<int>(list1); // Adjust case accordingly
    if (set.SetEquals(list2))
    {
        // Lists were equal
    }
    

    要考虑的一件事:如果您只对将它们视为集合感兴趣,您可能希望使用集合表示开始,而不是列表...

    【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多