列表中每个唯一值的计数

时间:2016-09-19 22:16:39

标签: vb.net

我需要从列表中找到唯一值以及每个值在原始列表中出现的次数。以下是我到目前为止的情况:

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.

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