C# 字典包含值并通过一个步骤获取密钥,还是以有效的方式完成此任务?

C# 字典包含值并通过一个步骤获取密钥,还是以有效的方式完成此任务?,c#,dictionary,C#,Dictionary,一旦知道值存在,是否有有效的方法检查字典中的值,然后找到该值的键 //检查字典已经有sortedWord(即关键字是单词,值是sortedWord) 这个问题基本上是相反的要求。 您需要一个值对应的“the”键,但可能有多个这样的键。因此,您可能应该使用.First()而不是.Single() 而且字典的排序顺序是未定义的,因此查找“first”键是不明确的 您可以执行以下操作(也适用于值类型的键): 如果您不在乎获得的是哪把钥匙,那么在第一次匹配时停止会更有效: var keys = dict

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

//检查字典已经有sortedWord(即关键字是单词,值是sortedWord)

这个问题基本上是相反的要求。

您需要一个值对应的“the”键,但可能有多个这样的键。因此,您可能应该使用
.First()
而不是
.Single()

而且字典的排序顺序是未定义的,因此查找“first”键是不明确的

您可以执行以下操作(也适用于值类型的键):

如果您不在乎获得的是哪把钥匙,那么在第一次匹配时停止会更有效:

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)
{
    ...
}

谢谢乔的评论。同意使用.First()而不是.Single()。您所说的不是ContainsValue(),而是查找键并在之后使用。这对我来说很有意义。顺便说一句,哪个更快ContainsValue()或上面的查询。
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)
{
    ...
}