【问题标题】:How to return all keys with a certain value from a list of KeyValuePair (vb.net or C#)如何从 KeyValuePair(vb.net 或 C#)列表中返回具有特定值的所有键
【发布时间】:2009-10-27 03:45:13
【问题描述】:

给定以下 vb.net 类:

Friend Class PairCollection(Of TKey, TValue)
    Inherits List(Of KeyValuePair(Of TKey, TValue))

    Public Overloads Sub Add(ByVal key As TKey, ByVal value As TValue)
        Me.Add(New KeyValuePair(Of TKey, TValue)(key, value))
    End Sub

    Public Function FindByValue(ByVal value As TValue) As List(Of KeyValuePair(Of TKey, TValue))
        Return Me.FindAll(Function(item As KeyValuePair(Of TKey, TValue)) (item.Value.Equals(value)))
    End Function

End Class

函数 FindByValue 返回一个适合某个值的 KeyValuePair。但是,此 PairCollection 的实现可能具有 m:1 键值,因此我希望返回具有该值的所有键(和唯一键)(可能不止一个)。

我是 vb.net 中的 Lambda 表达式的新手,并且更熟悉 C#,这并没有让问题变得更容易。我可以编写一个简单的例程来迭代集合,但我觉得有一种 lambda 和泛型结合的方法。

我认为我正在尝试做的事情大致如下:

Public Function FindByValue2(ByVal value As TValue) As List(Of TKey)
    Return Me.FindAll(Function(item As list(of TKey) (item.Value.Equals(value)))
End Function

我正在尝试的相关推理是here

【问题讨论】:

    标签: vb.net generics lambda


    【解决方案1】:

    你做得对。您只需要使用Select 投影输出。

    Public Function FindByValue(ByVal value As TValue) As List(Of TKey)
        Return Me.Where(Function(item) item.Value.Equals(value)) _
                 .Select(Function(x) x.Key).ToList()
    End Function
    

    顺便说一句,继承List 几乎总是一件错误的事情。尝试重新设计您的课程。

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多