gpt4 book ai didi

c# - Linq:GroupBy 与 Distinct

转载 作者:可可西里 更新时间:2023-11-01 07:55:42 29 4
gpt4 key购买 nike

我一直在尝试让 Linq 查询从集合中返回不同的值。我找到了两种解决方法;使用 GroupBy 或 Distinct。我知道 Distinct 是为这项工作而设计的,但我必须在对象上实现 IEquatable。

我尝试了 GroupBy,效果很好。我想知道使用 Distinct 与 GroupBy 是否具有明显的性能优势。

最佳答案

Distinct() 将比较集合中的整个对象(对于引用类型,您需要覆盖 GetHashCode 和 Equals)。它将枚举项目并将它们添加到集合中。简单快捷。像这样的东西:

Set<TSource> set = new Set<TSource>(comparer);

foreach (TSource tSource in source)
{
if (!set.Add(tSource))
continue;

yield return tSource;
}

GroupBy() 允许您按某个键对对象进行分组。在这种情况下,将比较键。它将需要为集合中的每个项目执行键选择器 lambda。它还需要为每个不同的键创建分组,并将集合中的每个项目添加到其组中:

Func<TSource, TElement> elementSelector = x => x;

<TKey, TElement> lookup = new Lookup<TKey, TElement>(comparer);
foreach (TSource tSource in source)
{
TKey key = keySelector(tSource);

// simplified pseudo-code
if (!lookup.Contains(key))
lookup.Add(new Grouping(key));

lookup[key].Add(elementSelector(tSource));
}

foreach(IGrouping<TKey, TElement> grouping in lookup)
yield return grouping;

所以,我认为 GroupBy() 没有简单的 Distict() 快。

关于c# - Linq:GroupBy 与 Distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066346/

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