Distinct()保留始终采用列表中的第一个元素

时间:2010-03-19 06:51:44

标签: c# linq

int[] nums = { 2, 3, 3, 4, 2, 1, 6, 7, 10 };
var distinct = nums.Distinct();

总是按顺序返回2, 3, 4, 1, 6, 7, 10吗?

3 个答案:

答案 0 :(得分:16)

Enumerable.Distinct的定义行为是它将返回一个无序集合(Documentation)。

然而,Linq对象中Distinct的当前实现将保留顺序。但是,对于其他LINQ提供程序并不能保证这一点,并且不应依赖该行为。

答案 1 :(得分:2)

我认为“无序”一词意味着原始序列的顺序相同 因此,调用者应决定是否对结果进行排序。

答案 2 :(得分:0)

一般来说:没有,但在你的情况下(带有一个int数组):可能是的。我敢打赌,他们只是列举了这个系列并忽略了他们已经遇到过的物品。但是,不要指望跨不同版本的.NET或不同类型的集合的行为。

正如JaredPar在答案中指出的那样,结果被指定为无序。如果你想要一些特定的排序,你需要使用在你的情况下有意义的任何算法对它们进行排序。