组特定键的字典值

时间:2015-05-13 14:40:07

标签: vb.net dictionary

我有一个String字典和一个类型变量列表。即

Dim search As Dictionary(Of String, List(Of TypeResult))

我的查询是,如果我在字典中得到3个键值对,并且我想要仅使用特定键的值(比如第3号键)进行分组,那么如何做同样的事情。

通过groupby,我想消除特定键列表中的任何重复值。

任何代码段或建议都会很棒。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

我想消除特定键列表中的任何重复值

有几种方法可以执行此操作,具体取决于如何 时将项目添加到特定键的列表中,以及在何时需要它们没有重复。

您可以这样做,以确保列表中永远不会有任何重复值。

Sub AddItem(ByVal key As String, ByVal val as TypeResult)
    Dim values As List(Of TypeResult)
    If (search.TryGetValue(key, values)) Then
        If (Not values.Contains(val)) Then
            values.Add(val)
        End If
    Else
        values = new List(Of TypeResult)()
        values.Add(val)
        search.Add(key, values)
    End If
End Sub

请注意,TypeResult必须提供EqualsGetHashCode实施,否则对Contains的调用可能无法为您提供所需的行为。

另一种选择是在将重复值返回给要求特定键值的人时过滤掉重复值。

Function DistinctValuesFor(ByVal key As String) As IEnumerable(Of TypeResult)
    Dim values As List(Of TypeResult)
    If (search.TryGetValue(key, values)) Then
        DistinctValuesFor = values.Distinct()
    Else
        DistinctValuesFor = Enumerable.Empty(Of TypeResult)()
    End If
End Function