.net词典获取没有Linq的价值的关键

时间:2016-05-30 16:19:50

标签: .net dictionary

我可以找到任意数量的如何使用Linq在Dictionary中找到给定值的键的示例。但是,我们的代码必须跨平台运行,Linq不能用于我们的大多数目标。

那么,是否有人(最好是VB)代码可以使用任何词典并返回keyForValue? “第一场比赛”就是我们所需要的,因为价值将是独一无二的。

4 个答案:

答案 0 :(得分:1)

是IDictionary还是IDictionary(通用)? 首先,您需要遍历存储的实例,这些实例的类型为DictionaryEntry:

foreach (var e in dict.OfType<DictionaryEntry>())
{
    if (e.Value == "target")
    {
    }
}

对于通用的,它稍微简单一些:

foreach (var e in dict)
{
    if (e.Value == "target")
    {
    }
}

答案 1 :(得分:1)

Public Module DictionaryHelper
    Public Function KeyForValue(Of TKey, TValue)(dict As Dictionary(Of TKey, TValue), value As TValue) As TKey
        For Each item As KeyValuePair(Of TKey, TValue) In dict
            Dim value2 As TValue = item.Value
            If value2.Equals(value) Then
                Return item.Key
            End If
        Next
        Throw New KeyNotFoundException()
    End Function
End Module

答案 2 :(得分:1)

在一行中查询:

在C#中

string key  = myDict.Keys.ToList()[myDict.Values.ToList().IndexOf(value)]
VB中的

key =  myDict.Keys.ToList()(myDict.Values.ToList().IndexOf(value))

答案 3 :(得分:0)

在VB中没有经验,所以我在C#中回答并希望你能改变它:

public TKey GetKeyForValue<TKey,TValue>(Dictionary<TKey, TValue> dictionary, TValue val)
{
    foreach(KeyValuePair<TKey, TValue> kvp in dictionary)
        if (kvp.Value == val) return kvp.Key;
    return default(TKey); // or throw an appropriate exception for not having found the key
}

这将遍历字典中的KeyValuePair并返回第一个匹配值的键,而不使用LINQ