需要排序字典,用于查找键小于或大于搜索值的值

Cap*_*mic 4 .net c# dictionary sortedlist data-structures

我需要按价格(十进制)值对对象进行快速访问.我需要能够找到价格大于A小于B的所有物品.我想到了SortedList,但它没有提供从给定键值开始查找升序或降序枚举器的方法(比如给我所有价格低于120美元的对象).

想象一个系统接受卖家出售的汽车并将它们存储到该集合中.然后买家希望找到比1000美元便宜的汽车.

基本上我需要的是基于树的集合和功能,以找到更小\更大\等于提供密钥的节点.

请指教.

Ale*_*lex 6

您可以在SortedList上使用BinarySearch来搜索满足条件的第一个和最后一个索引,然后从列表中获取项目范围.


Mar*_*tos 4

答案取决于您的使用模式。如果这是消耗未排序的输入集并查找合适对象的一次性练习,那么您最好只使用 LINQ:

list.Where(e => A < e.Price || e.Price < B);
Run Code Online (Sandbox Code Playgroud)

如果列表是静态的,并且您想要查询多个范围,则将对象放入数组中,按价格对它们进行排序,然后使用二元印章查找感兴趣的范围。

  • 确实如此。由于性能问题,我不愿意使用 LINQ。 (3认同)
  • 不要过早优化。LINQ 代码对于大多数用途来说都足够快,在某些情况下甚至可以胜过手写的列表操作逻辑。 (2认同)