我需要从列表中找到唯一值以及每个值在原始列表中出现的次数。以下是我到目前为止的情况:
Dim Lister As New List(Of String)()
For Each item In eColumn
Lister.Add(item.value)
Next
Dim Result As New List(Of String)
Result = Lister.Distinct().ToList
For Each st In Result
MsgBox(st)
Next
结果是所有唯一值的列表,但不包括每个项目的计数。例如,如果我的列表是
John
John
Abbey
Larry
Larry
Larry
Charles
我想要返回4个值:John = 2,Abbey = 1,Larry = 3,Charles = 1.
答案 0 :(得分:4)
使用linq的.Distinct()只会给你一个包含列表中每个不同名称的列表;因此,您必须看到消息框循环运行时,它只会显示列表中的每个名称。
VB的列表没有用于返回列表中项目出现次数的本机函数,因此为了获得所需的结果,只需使用linq的.GroupBy()函数对它们进行分组。它将返回一个Linq.GroupedEnumerable对象,该对象可以迭代通过,并且还拥有您正在寻找的count属性:
Dim myList As New List(Of String) From {"John", "John", "Abbey", "Larry", "Larry", "Larry", "Charles"}
Dim groupedNames = myList.GroupBy(Function(x) x)
If groupedNames IsNot Nothing AndAlso groupedNames.Count > 0 Then
For Each person In groupedNames
Debug.Print(person.Key & "-" & person.Count.ToString)
Next
End If
输出:
John-2
Abbey-1
Larry-3
Charles-1