Dictionary ContainsValue和get key在一个步骤或有效的方式来完成这个任务

本文关键字:有效 方式 任务 一个 key get ContainsValue Dictionary | 更新日期: 2023-09-27 18:02:41

是否有有效的方法来检查值是否在字典中,一旦知道值在那里,然后找到该值的键?

//检查字典中是否存在sortedWord(即key为word, value为sortedWord)

 if (anagramDict.ContainsValue(sortedWord))
     {
       //Get the key for matching the sortedWord 
       string keyWord = anagramDict.Single(kvp => kvp.Value == sortedWord).Key;

基本上是这个问题的反向请求。Dictionary ContainsKey和get value在一个函数中

Dictionary ContainsValue和get key在一个步骤或有效的方式来完成这个任务

请求与值对应的"the"键,但是可能有多个这样的键。因此,您可能应该使用.First()而不是.Single()

并且字典的排序顺序是未定义的,因此查找"第一个"键是不明确的。

您可以做如下操作(对于值类型的键也适用):

var keys = dict.Where(kvp => kvp.Value == sortedWord).Select(kvp => kvp.Key).ToList();
if (keys.Count > 0)
{
    // Now you need to decide which matching key you want.
    // If you don't care, you can take the first
    key = keys[0];
}

如果你不关心你得到的是哪个键,那么在第一次匹配时停止是更有效的:

var keys = dict.Where(kvp => kvp.Value == sortedWord).Select(kvp => kvp.Key).Take(1).ToList();
if (keys.Count > 0)
{
    key = keys[0];
}

对于键是引用类型的字典(这是您的情况:我假设您的键是字符串),并且假设您不关心得到哪个键,您可以将其简化为:

var key = dict.Where(kvp => kvp.Value == sortedWord).Select(kvp => kvp.Key).FirstOrDefault();
if (key != null)
{
    ...
}