【问题标题】:Dictionary get item with highest value and key字典获取具有最高值和键的项目
【发布时间】:2014-10-30 16:09:19
【问题描述】:

在我的字典(int,int) 中,我试图获取值为 3 且该键最大的键。 如果我想获取值为 3 的键,我可以使用以下代码:

var max = double_list.FirstOrDefault(x => x.Value == 3).Key;

但是,如果我的字典包含多个值为 3 的项目,我会得到第一个值为 3 的项目(请参阅“FirstOrDefault”),我真正想要的是当有多个值为 3 的项目时,我想比较这些项目通过他们的密钥并获得具有最高密钥的项目。

例如:

|钥匙 |价值

| 12 | 3

| 13 | 2

| 18 | 3

我希望得到 18 作为结果,而不是 12。我希望你能理解我的问题是什么。抱歉我的英语不好,非常感谢任何输入!

【问题讨论】:

  • var max = double_list.Where(x => x.Value == 3 && x.Key == double_list.Max(item =? item.Key));

标签: c# dictionary


【解决方案1】:

最简单的方法就是使用Max

var max = dictionary.Where(x => x.Value == 3).Max(x => x.Key);

如果您想获得的不仅仅是最高键,您可以使用类似的东西:

var topTwo = dictionary.Where(x => x.Value == 3)
                       .Select(x => x.Key)
                       .OrderByDescending(x => x)
                       .Take(2);

但如果你只想要最高的单键,我肯定会使用Max

【讨论】:

  • 它在这种情况下有效,但如果我也想获得第二好的项目怎么办。假设我的字典有 10 项,3 项的值为 3,现在我想从 3 项中获取具有最高键的两项。你有没有为此目的的通用代码?
  • @user3868224:在这种情况下,您将使用SelectOrderByDescendingTake。但这是一个不同的问题......我会将其编辑为答案,但请在以后询问您真正想要什么,而不仅仅是一个过于简化的版本。
【解决方案2】:

只需在查询中插入OrderByDescending

var max = double_list
  .OrderByDescending(x => x.Value == 3)
  .FirstOrDefault().Key;

【讨论】:

  • 不需要使用完整的排序;我们只需要最大值。此外,您现在按布尔值排序,与键无关...
  • 好点。顺序是我想到的,但使用 Max 是更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 2020-07-26
相关资源
最近更新 更多