这个问题可能看似重复和/或太无聊,但我想使用这种特定的方法来做这件事。
当用户在文本框中输入字符串时,我想获取此字符串键。为此,我创建了一个具有n(n <= 15000)个唯一值的字典。我希望通过值从这本字典中获取密钥。以下方法效果很好:
Dictionary<int, string> artikullar = new Dictionary<int, string>();
int key = (from elem in artikullar where elem.Value == txt_artikul.Text select elem).First().Key;
在此之前,我尝试使用First()
方法获取密钥:
int key = artikullar.AsParallel().First(new Func<KeyValuePair<int, string>, bool>(val => val == txt_artikul.Text)).Key;
但它引发了这个错误:
运算符'=='无法应用于'KeyValuePair'和'string'类型的操作数
之前我没有使用过这种方法。
任何有用的评论或答案都将不胜感激。
答案 0 :(得分:5)
您说Dictionary
中的字符串是唯一的。我不知道你何时创建Dictionary
,以及数据是静态的还是一直在动态变化。
如果相当静态并且字符串是唯一的,您可以考虑创建一个反向Dictionary
,如下所示:
Dictionary<string, int> reversedDict = artikullar.ToDictionary(
kvp => kvp.Value,
kvp => kvp.Key);
然后将其用于查找:
int key = reversedDict[txt_artikul.Text];
这可能比查询原始字典更快。
答案 1 :(得分:3)
你必须改变:
val => val == txt_artikul.Text
为:
val = > val.Value == txt_artikul.Text
你有KeyValuePair
的实例,你必须在lambda表达式中指定要比较的Value
。