gpt4 book ai didi

c# - 是否有 LINQ 等效方法?

转载 作者:太空狗 更新时间:2023-10-29 20:50:54 25 4
gpt4 key购买 nike

我知道 LINQ 有一个 SequenceEquals方法。此方法确保每个集合中的每个项目值都以相同的顺序匹配。

我正在寻找的是一种更“等效”的功能类型。只是两个序列包含相同的项目,不一定是相同的顺序。

例如,nUnit 具有 CollectionAssert.AreEqual()CollectionAssert.AreEquivalent() 来执行我正在解释的操作。

我知道我可以通过以下方式做到这一点:

  1. 提前对列表进行排序并使用 SequenceEquals
  2. 使用Intersect,然后查看交集是否等于原始序列。

例子:

var source = new[] {5, 6, 7};
source.Intersect(new[] {5, 7, 6}).Count() == source.Length;

最佳答案

您可以构建一个集合,然后使用 HashSet<T>.SetEquals .严格来说,它不在 LINQ 中,但它与它配合得很好 :)

当然,您可以轻松编写自己的扩展方法来扩展它。像这样:

public static bool SetEquals<T>(this IEnumerable<T> source, IEnumerable<T> other)
{
HashSet<T> hashSet = new HashSet<T>(source);
return hashSet.SetEquals(other); // Doesn't recurse! Calls HashSet.SetEquals
}

编辑:如评论中所述,这忽略了元素出现的次数以及顺序 - 所以 { 1, 2 }将“设置为”等于 { 1, 2, 1, 2, 1, 1, 1 } .如果这不是您想要的,它会变得有点复杂。

关于c# - 是否有 LINQ 等效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3760801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com