我有一个SortedDictionary
如何找到与最大值关联的密钥?我是否必须遍历每个KeyValuePair?从SortedDictionary中查找带有最大值的键?
回答
如果dict
是你SortedDictionary<,>
,你想所有对应于最大值的钥匙,首先检查dict
不为空或空(你至少需要一个元素)。那么也许这个作品:
var max = dict.Values.Max();
var relevantKeys = dict.Where(pair => max.Equals(pair.Value))
.Select(pair => pair.Key);
也许它可以做得更有效率?
我会写pair.Value.Equals(max),但是,它看起来很优雅。我只是喜欢流利的代码;) – 2012-07-18 20:54:57
@MareInfinitus我认为:更有可能是某些值为'null',而不是'max'为'null'(尽管可能发生,我猜如果_all_值是' null')。 – 2012-07-18 20:59:27
也许我应该说'Equals(pair.Value,max)',即静态的'Equals'。 – 2012-07-18 21:02:05
使用Enumerable.OrderByDescending()
,然后访问什么样的Key
财产,像这样First()
回报:
var dict = new SortedDictionary<string, string>
{
{"key1", "value3"},
{"key2", "value1"},
{"key3", "value2"},
};
var max = dict.OrderByDescending(d => d.Value).First();
var key = max.Key;
掌握最高值相关联的密钥,你实际上并没有使用SortedDictionary的默认排序指。这是因为SortedDictionar通过Key来订购,而不是Value。所以,做你想做什么,你会做的老式LINQ方式:
sortedDict.OrderByDescending(kvp => kvp.Value).First().Key
var result = dictionary.MaxBy(pair => pair.Value).Key;
这将只需要一次迭代中的数据,而不是分选的值并取第一结果(这将是O(n * log(n))
)。
由于只有键而不是值被排序,所以没有至少循环每个密钥对一次就无法执行该查询。
另一种选择是拥有两个SortedDictionaries。一个将是你已经拥有的那个,另一个将是一个反向字典。对于当前字典中的每个值,您可以将其添加为第二个字典的关键字,并且第二个字典的值将成为第一个字典的关键字(如果它是一对多关系而不是一对一的值反向查找将需要一个项目列表)。虽然它会以编程方式“昂贵”(更多的是在内存中而不是时间,但仍然有一部分)来创建第二个字典,一旦你这样做,你将能够基于值而不是按键进行有效查询。
要获得所有您最感兴趣的值的密钥,必须完成一些数据处理。其实这在C#中很舒服。
它可以通过做LINQ的
的某种组合来实现有乐趣!
+1,注意可能有多个关键字与最大值关联。 – phoog 2012-07-18 20:56:37
- 1. 在数据结构中查找最大值最大值和最大键值
- 2. 查找SortedDictionary中项目索引的最有效方法
- 3. 从具有多列的.txt文件中查找最大值,最小值
- 4. 从bash数组中查找最大值和最小值
- 5. 查找最大,最小和中间值
- 6. 在Java地图中与最大值关联的查找键
- 7. 查找C中最大的数字,但是带有字符
- 8. 查找最大值/最小值
- 9. 查找局部最小值/最大值
- 10. 查找最小值和最大值JAVA
- 11. 查找循环中的最大值
- 12. Java:查找数组中的最大值
- 13. 在VBA中查找列的最大值
- 14. 查找数组中的最大值
- 15. 查找本地最大值
- 16. 查找最大值 - Java
- 17. 背包查找最大值
- 18. 查找最大群集的最小值?
- 19. 找到python字典中所有最大值的键?
- 20. 在bigquery中查找多个值的最小值和最大值
- 21. SortedDictionary重复键?
- 22. 从数据帧中的每一列中查找最大值
- 23. 在Java中查找num值和最小值/最大值值
- 24. 查找最后最大值/替代最大值为ARRAYFORMULA
- 25. 在CUDA中查找最大值
- 26. 在python中查找最大值
- 27. Python:在csv中查找最大新值
- 28. 在Doctrine中查找Groupwise最大值
- 29. 多维查找最大值MongoDB中
- 30. 如何在IntList中查找最大值?
你能澄清一下:你想要最大的密钥吗? 'SortedDictionary'按键的大小排序。所以这将是某种方式中的“最后”键。如果没有快速的方法来获得它,这很有趣!或者你实际上指的是最大值?这是你必须迭代整个集合(可能使用Linq的'Max'方法。 – 2012-07-18 20:30:42
请注意,这个值不一定是唯一的。你需要所有的密钥持有MaxValue还是任何人都可以? – 2012-07-18 20:33:03
@JeppeStigNielsen I不想要最大的密钥,我想要最大的密钥。 – User 2012-07-18 20:33:05