Linq List.Distinct()是否还根据出现次数对列表进行排序和排序

时间:2014-02-12 18:57:34

标签: c# linq

我刚看到This Question,我对接受的答案感到有点困惑

List<String> list = new List<String>{"6","1","2","2","4","6","5","1","6","6","2"};
list = list.Distinct().ToList();

list.Distict().ToList()也会根据发生的次数进行排序吗?如果它是一个复杂的列表那么我的意思是什么?

2 个答案:

答案 0 :(得分:5)

  

list.Distict()也是如此.ToList()也根据数量排序   出现?

不,它没有。它只是通过使用默认的相等比较器来比较值,从列表中返回不同的元素。

Enumerable.Distinct<TSource> Method (IEnumerable<TSource>)

  

Distinct(IEnumerable)方法返回一个   无序序列,不包含重复值。它使用了   default equality comparer,Default,比较值。

答案 1 :(得分:2)

  

list.Distict()也是如此.ToList()也根据出现次数排序?

不,它没有。允许Distinct()以任何有用的方式对序列重新排序。

  

我是说什么标准,如果它是一个复杂的列表然后是什么?

如果您需要按任何特定顺序排序的列表,您可以自行强制它。如果您想保留原始订单,可以使用更复杂的查询来执行此操作:

var unique = list
    .Select((v,i) => new {v, i})
    .GroupBy(p => p.v)
    .OrderBy(g => g.Min(p => p.i))
    .Select(g => g.Key)
    .ToList();

Demo on ideone.

如果您想根据出现次数进行订购,请使用此查询:

var unique = list
    .GroupBy(p => p)
    .OrderBy(g => g.Count()) // Items with smaller count are first
    .Select(g => g.Key)
    .ToList();

Demo on ideone.