【问题标题】:C# Comparison between Dictionary<string, int> and int result [duplicate]C# Dictionary<string, int> 和 int 结果之间的比较[重复]
【发布时间】:2020-10-15 13:52:09
【问题描述】:

这是我创建字典的函数:

public int Scale(string value)
{
 //some calculs
 int result = 19; // or int between 0 and 40
 this.stringToInt = new Dictionary<string, int>()
 {
  {"1p",00},{"2p",01},{"3p",03} ... {"300p",40}
 };
// Here I try to do something like that: if(result == (int in dictionary) return associate string
}

我尝试了以下代码:

if (this.stringToInt.ContainsValue(result)
{
    return this.stringToInt[result]; // I don't know what to write between hook (result doesn't work).
}

我不知道如何返回关联字符串。

提前感谢您的帮助!

【问题讨论】:

  • 您必须在字典 new Dictionary&lt;int, string&gt; 中交换您的 int 和字符串,然后使用 .ContainsKey()
  • 如果@nanu_nana 建议不起作用(如果 int 值不唯一),您可以使用简单的 linq:return stringToInt.First(x=> x.Value == result).Key。但是,如果它们不是唯一的,您将获得第一个匹配的字符串键。理想情况下,如果适用,使用 ContainsKey 是最佳解决方案。
  • 最终,这是使用字典向后。如果您需要偶尔为适度大小的集合执行此操作,那很好 - 但如果您需要经常执行此操作,或者对于非常大的数据:您应该考虑拥有两个字典 - 每个方向一个
  • @nanu_nana 或TryGetValue
  • 您的搜索似乎没有“the”方向。在this question 中,您正在按键搜索值,而在这里您正在按值搜索键。因此,您可能需要一些新的数据结构,其中的键是您的键和值的组合,并根据两者计算哈希。

标签: c# dictionary compare


【解决方案1】:
var keyValuePair = this.stringToInt.FirstOrDefault(x => x.Value == result);
if (!keyValuePair.Equals(new KeyValuePair<string, int>()))
{
    // found, use keyValuePair.Key
}

我猜这可以使用 Linq。但只返回第一个找到的值。如果该值在字典中多次出现,则只返回找到的第一个。

但是你应该像@nanu_nana的评论那样做

【讨论】:

  • 需要注意的是,这是通过字典进行线性搜索,就好像它是一个普通的列表一样。字典通常会为您带来的任何性能优势都会以这种方式消失。
猜你喜欢
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多