2010-03-19 66 views

回答

16

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

但是目前执行的Linq中清晰到的对象将维持秩序。但对于其他LINQ提供商来说,这并不能保证,并且不应该依赖这种行为。

+0

因此,这将返回有时'{3,2,4,10,6,7,1}'(例如)有时,而不是在顺序遇到的项目吗?你也许有这个或一个示例代码的任何链接? – Cornelius

+0

@Cornelius查看我的更新回答 – JaredPar

+0

Queryable.Distinct的相似答案(它返回一个无序序列)请参阅[DISTINCT()和ORDERBY问题](// stackoverflow.com/a/12429107) –

0

一般:没有,但在你的情况下(与int数组):或许是肯定的。我敢打赌,他们只是列举了收藏品,忽视了他们已经遇到的物品。但不要指望不同版本的.NET或不同类型的集合中的这种行为。

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

2

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

+3

您认为单词“无序”意味着“按特定顺序”?这是一个奇怪的想法! :-)“无序”的意思是“没有特定的顺序”。 –

+0

@Eric:我希望你阅读这个评论。我的意思是(并且我认为是隐含的),返回值序列的顺序没有被修改(即,返回序列的顺序被保持为序列传入的顺序)。我在哪里说“无序”是指特定的顺序?因此,按照上述情况下'INT [] NUMS = {2,3,3,4,2,1,6,7,10};',返回的序列将不返回值排序&将返回'2, 3,4,1,6,7,10'。 – shahkalpesh

+3

而且这个顺序 - 原始顺序的出现顺序 - 是一个特定顺序,是数百万个可能顺序中的一个顺序。该方法的文档不能保证这个特定的顺序是选择的。在*练习*中选择了这个特定的顺序。但通过“无序”的文档意味着*任何订单*可以通过实施来选择。有时不保留原始订单会更有效率。 –

相关问题