列表中每个唯一值的计数

Chr*_*tte 1 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
Run Code Online (Sandbox Code Playgroud)

结果是所有唯一值的列表,但不包括每个项目的计数。例如,如果我的清单是

John
John
Abbey
Larry
Larry
Larry
Charles
Run Code Online (Sandbox Code Playgroud)

我想要返回 4 个值:John = 2、Abbey = 1、Larry = 3、Charles = 1。

soo*_*gan 5

使用 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
Run Code Online (Sandbox Code Playgroud)

输出:

John-2
Abbey-1
Larry-3
Charles-1
Run Code Online (Sandbox Code Playgroud)