c# - 任何内置方法只知道两个列表是否不同?

标签 c# linq generics collections comparison

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

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

我知道我可以循环列表,但想知道是否有任何内置的 LINQ/扩展方法可以实现此目的,从而提供更好的性能。尝试过 Except/Intersect,但不知道它们是否最适合实现此目的。

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

最佳答案

您想如何处理重复项?例如,您会将 { 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
}

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

关于c# - 任何内置方法只知道两个列表是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4943920/

相关文章:

c# - 如何将日期时间格式转换为日期和时间对象?

c# - 重定向到页面和按下后退按钮后进入同一页面之间的区别?

c# - 使用泛型的列的最大值

c# - SQLite .NET 是否在 CreateTable 方法中接受接口(interface)

c# - Entity Framework 6.1 Code First 迁移错误 : EntityType 'IdentityUserRole' has no key defined

c# - 将我的 DateTime 转换为 UTC 时遇到问题

vb.net - 检查两个列表是否至少有一个共同项

java - 将比较器与泛型一起使用

c# - 如何选择不在其他列表中的 int?

c# - LINQ多对多关系,如何写出正确的WHERE子句?