【发布时间】:2017-01-15 01:39:50
【问题描述】:
在我的下图中应用DISTINCT.ToList() 时,哪些项目将从结果列表中删除?
重复项中的第一个条目(即第一个添加到列表中的条目)是否保留在返回的新列表中?如果没有,有没有办法让DISTINCT.ToList() 保留返回的新列表中重复项中的第一个条目?
Dim values As List(Of Integer) = New List(Of Integer)
values.Add(1)
values.Add(5)
values.Add(2)
values.Add(3)
values.Add(2)
values.Add(3)
values.Add(4)
values.Add(2)
values.Add(2)
values.Add(3)
values.Add(3)
values.Add(3)
Dim items As List(Of Integer) = values.Distinct().ToList
' Display result.
For Each i As Integer In items
Console.WriteLine(i)
Next
Expected output:
1
5
2
3
4
这个MSDN 页面显示“Distinct(Of TSource)(IEnumerable(Of TSource)) 方法返回一个不包含重复值的无序序列”。有没有办法解决这个问题?
【问题讨论】:
-
事实上,不会从列表中删除任何项目,而是返回一个包含不同项目的新列表。
-
您始终可以自己添加一个扩展方法来订购它:
public static IOrderedEnumerable<T> OrderedDistinct(this IEnumerable<T> data) { return data.Distinct().OrderBy(x => x); } -
Distinct操作返回的列表只包含最先出现的原始项,没有排序。所以你必须在你的例子中期待你的预期输出。
标签: c# vb.net list ienumerable