gpt4 book ai didi

linq - LINQ .distinct 方法如何排序?

转载 作者:行者123 更新时间:2023-12-03 23:05:09 27 4
gpt4 key购买 nike

假设我正在使用 LINQ 数组 .Distinct()方法。
结果是无序的。

好吧,如果您知道用于产生结果的逻辑,那么一切都是“有序的”。

我的问题是关于结果集。结果数组是按“第一个不同”顺序还是“最后一个不同”顺序?

我不能指望任何订单吗?

这是旧的“删除重复字符串”问题,但我正在研究 LINQ 解决方案。

最佳答案

假设您的意思是 LINQ to Objects,它基本上保留了迄今为止返回的所有结果的集合,并且仅在之前没有产生过的情况下才会产生“当前”项目。所以结果是原始顺序,删除了重复项。像这样的东西(除了错误检查等):

public static IEnumerable<T> Distinct<T>(this IEnumerable<T> source)
{
HashSet<T> set = new HashSet<T>();

foreach (T item in source)
{
if (set.Add(item))
{
// New item, so yield it
yield return item;
}
}
}

这不能保证 - 但我无法想象任何更明智的实现。这允许 Distinct()尽可能地懒惰 - 数据会尽快返回,并且只缓冲最少量的数据。

依赖于此将是一个坏主意,但了解当前实现(显然)如何工作可能会有所启发。特别是,您可以很容易地观察到它在耗尽原始序列之前开始返回数据,只需创建一个源,该源记录何时产生要被 Distinct 使用的数据。 ,并在您从 Distinct 接收数据时进行记录.

关于linq - LINQ .distinct 方法如何排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109938/

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