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

发布于 2024-10-16 20:59:15 字数 221 浏览 3 评论 0原文

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

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

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

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

I have to compare two lists and only know if they contain same values or not. I do not intend to do anything with the differences.

What would be the best way to achieve this in C#?

I know I can loop the lists but want to know if theres any in-built LINQ/extenstion method to achieve this which provides better performance. Did try Except/Intersect, but don't know if they are the most suitable ones to achieve this.

Update: The lists won't have any duplicates within them.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

计㈡愣 2024-10-23 20:59:15

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

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

How do you want to handle duplicates? For example, would you count { 2, 1, 1 } as being the same as { 1, 2 }? (I'm assuming that the order is irrelevant... otherwise just use SequenceEqual.)

Assuming you only care about "sets" effectively, here are two options:

A quick and dirty way:

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

A slightly cleaner way:

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

One thing to consider: if you're only interested in treating them as sets, you might want to use a set representation to start with, instead of a list...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文