我有一个String字典和一个类型变量列表。即
Dim search As Dictionary(Of String, List(Of TypeResult))
我的查询是,如果我在字典中得到3个键值对,并且我想要仅使用特定键的值(比如第3号键)进行分组,那么如何做同样的事情。
通过groupby,我想消除特定键列表中的任何重复值。
任何代码段或建议都会很棒。
提前致谢。
答案 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
必须提供Equals
和GetHashCode
实施,否则对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