我如何得到一个字典键值在c# ?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
我想要这样的东西:
getByValueKey(string value);
getByValueKey("one")必须返回"1"。
最好的方法是什么?也许是哈希表或排序列表?
我如何得到一个字典键值在c# ?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
我想要这样的东西:
getByValueKey(string value);
getByValueKey("one")必须返回"1"。
最好的方法是什么?也许是哈希表或排序列表?
当前回答
也许是这样的:
foreach (var keyvaluepair in dict)
{
if(Object.ReferenceEquals(keyvaluepair.Value, searchedObject))
{
//dict.Remove(keyvaluepair.Key);
break;
}
}
其他回答
Dictionary<K,V>扩展。我已经用了很长时间了::
public static bool TryGetKey<K, V>(this IDictionary<K, V> instance, V value, out K key)
{
foreach (var entry in instance)
{
if (!entry.Value.Equals(value))
{
continue;
}
key = entry.Key;
return true;
}
key = default(K);
return false;
}
并使用as:
public static void Main()
{
Dictionary<string, string> dict = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
string value="two";
if (dict.TryGetKey(value, out var returnedKey))
Console.WriteLine($"Found Key {returnedKey}");
else
Console.WriteLine($"No key found for value {value}");
}
我有一个很简单的方法。这对我来说很完美。
Dictionary<string, string> types = new Dictionary<string, string>();
types.Add("1", "one");
types.Add("2", "two");
types.Add("3", "three");
Console.WriteLine("Please type a key to show its value: ");
string rLine = Console.ReadLine();
if(types.ContainsKey(rLine))
{
string value_For_Key = types[rLine];
Console.WriteLine("Value for " + rLine + " is" + value_For_Key);
}
值不一定是唯一的,所以必须进行查找。你可以这样做:
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
如果值是唯一的,并且插入的频率低于读取,那么创建一个反向字典,其中值是键,键是值。
也许是这样的:
foreach (var keyvaluepair in dict)
{
if(Object.ReferenceEquals(keyvaluepair.Value, searchedObject))
{
//dict.Remove(keyvaluepair.Key);
break;
}
}
types.Values.ToList().IndexOf("one");
values . tolist()将您的字典值转换为对象列表。 IndexOf("one")搜索你的新列表,寻找"one",并返回与字典中Key/Value对的索引匹配的Index。
这个方法并不关心字典中的键,它只是返回您正在寻找的值的索引。
请记住,在你的字典中可能有不止一个“1”值。这就是没有“get key”方法的原因。