我如何得到一个字典键值在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"。
最好的方法是什么?也许是哈希表或排序列表?
当前回答
我有一个很简单的方法。这对我来说很完美。
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);
}
其他回答
也许是这样的:
foreach (var keyvaluepair in dict)
{
if(Object.ReferenceEquals(keyvaluepair.Value, searchedObject))
{
//dict.Remove(keyvaluepair.Key);
break;
}
}
我有一个很简单的方法。这对我来说很完美。
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);
}
keys中的键的顺序是未指定的,但它与values中的相关值相同(来自c#文档)。
因此,(在某些情况下)对值的集合执行此操作的有效方法如下:
/// <summary>
/// Gets the 1st key matching each value
/// </summary>
public static IEnumerable<TKey> GetKeys<TKey,TValue>(this Dictionary<TKey, TValue> dic, IEnumerable<TValue> values) where TKey : notnull
{
//The order of the keys in Keys is unspecified, but it is the same as the associated values in Values
var dicKeys = dic.Keys.ToList();
var dicValues = dic.Values.ToList();
foreach (var value in values)
{
var i = dicValues.IndexOf(value); //Will return the index of the 1st found value, even when multiple values are present
//we could test if i==-1 there.
yield return dicKeys[i];
}
}
你可以这样做:
通过循环遍历字典中的所有KeyValuePair<TKey, TValue>(如果字典中有许多条目,这将是一个相当大的性能打击) 使用两个字典,一个用于值到键映射,一个用于键到值映射(这会占用两倍的内存空间)。
如果不考虑性能,请使用方法1;如果不考虑内存,请使用方法2。
此外,所有键都必须是唯一的,但值不要求是唯一的。您可以有多个具有指定值的键。
types.Values.ToList().IndexOf("one");
values . tolist()将您的字典值转换为对象列表。 IndexOf("one")搜索你的新列表,寻找"one",并返回与字典中Key/Value对的索引匹配的Index。
这个方法并不关心字典中的键,它只是返回您正在寻找的值的索引。
请记住,在你的字典中可能有不止一个“1”值。这就是没有“get key”方法的原因。