我可以找到任意数量的如何使用Linq在Dictionary中找到给定值的键的示例。但是,我们的代码必须跨平台运行,Linq不能用于我们的大多数目标。
那么,是否有人(最好是VB)代码可以使用任何词典并返回keyForValue
? “第一场比赛”就是我们所需要的,因为价值将是独一无二的。
答案 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 。