我需要确定两个集合是否包含完全相同的元素.顺序无关紧要.

例如,这两个数组应被视为相等:

IEnumerable<int> data = new []{3, 5, 6, 9};
IEnumerable<int> otherData = new []{6, 5, 9, 3}

一个集合不能包含任何不在另一个集合中的元素.

这可以使用内置的查询操作符来完成吗?考虑到元素的数量可能从几个到数百个,实现它的最有效方式是什么?

推荐答案

如果要将数组视为"集合",并忽略顺序和重复项,可以使用HashSet<T>.SetEquals method:

var isEqual = new HashSet<int>(first).SetEquals(second);

否则,最好的 Select 可能是以相同的方式对两个序列进行排序,并使用SequenceEqual来比较它们.

.net相关问答推荐

Docker失败文件找不到

.NET发布的应用程序运行与开发不同的端口

Dotnet 反射:使用 F# 中的out参数调用 MethodInfo 上的调用

为什么解码后的字节数组与原始字节数组不同?

是否存在指定的(子)索引分隔符?

移位比Java中的乘法和除法更快吗? .网?

如何使用 Moq 为不同的参数设置两次方法

在 .NET 反射中使用 GetProperties() 和 BindingFlags.DeclaredOnly

代理、包装器或外观类之间有什么区别

ASP.NET MVC:隐藏字段值不会使用 HtmlHelper.Hidden 呈现

将屏幕捕获为位图

如何在 C# 中直接执行 SQL 查询?

数据库架构更改后更新 LINQ to SQL 类的最佳方法

何时在 C#/.NET 中使用指针?

.NET 反射的成本是多少?

如何异步 Files.ReadAllLines 并等待结果?

错误 NU1605 检测到包降级

C# List<> 按 x 然后 y 排序

将控制台输出镜像到文件

使用 C# vs F# 或 F# vs C# 有什么好处?