【问题标题】:Getting top element from Hashtable从哈希表中获取顶部元素
【发布时间】:2014-05-23 16:21:52
【问题描述】:

朋友们,我知道 Hastable 无法排序,但由于复杂性好,我必须使用 Hashtable 而不是字典。现在我处于需要从 Hashtable 中获取顶部(最大)3 个元素的情况。在我处理数百万行时,请告诉我任何最简单有效的方法。

.....................

输入

.....................

hashtable.Add("A", 1000);    
hashtable.Add("B", 500);    
hashtable.Add("C", 700);   
hashtable.Add("D", 800);    
hashtable.Add("E", 400);   
hashtable.Add("F", 300);

.....................

输出

.....................

("A", 1000), ("D", 800) and ("C",700)

【问题讨论】:

  • 您对“前 3 个元素”的定义是什么?我注意到,在您的问题中,您正确地指出 Hashtables 无法排序,所以看起来您回答了自己的问题。
  • “我必须使用哈希表而不是字典”?你在说什么样的“复杂性”?
  • I must have to use Hashtable over dictionary 请注意,Dictionary 也没有排序。如果您需要订购,您可以使用SortedListSortedDictionary
  • 为什么不直接使用 OrderedDictionary?看看这个:msdn.microsoft.com/en-us/library/…
  • 时间复杂度。不要担心这些事情,请告诉我仅在 Hashtable 中排序的方法。

标签: c# .net dictionary hashtable time-complexity


【解决方案1】:
hashtable.Cast<DictionaryEntry>().OrderBy(entry => entry.Value).Take(3);

【讨论】:

  • OP 说I am dealing with millions of rows
  • 我可以将其转换为列表吗?如果是怎么办? differentKeys.Cast().OrderBy(entry => entry.Value).Take(3).ToList();不工作
  • 它的 ok hashtable 没有很少的记录,但是那些数百万行每次都在访问 hashtable。所以看起来没问题。我现在只需要转换为 List 的方法。
  • +0,可能但较慢的解决方案。显然,排序以获取固定数量的最大元素比调用Max 固定次数更糟糕(OrderBy 的 O(n log n) 与调用 Max 3 次的 O(n))
  • 在我看来,使用哈希表的想法本身是值得商榷的,当 OP 有更好的选择 SortedListSortedDictionary 正如@SriramSakthivel 建议的那样。@Pratik .ToList() 应该可以工作
猜你喜欢
  • 2016-04-23
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 2013-10-28
  • 2013-12-16
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多