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

时间:2010-04-23 11:55:15

标签: c# .net data-structures dictionary sortedlist

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

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

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

请建议。

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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

list.Where(e => A < e.Price || e.Price < B);

如果列表是静态的,并且您想查询多个范围,则将对象粘贴到一个数组中,按价格对它们进行排序,然后使用二进制方法查找感兴趣的范围。

答案 2 :(得分:2)

请想一下SortedList。或者,您可以使用任何集合并使用LINQ进行查询。例如普通通用列表:

        List<Int32> tempList = new List<Int32>();

        tempList.Where(singleItem => singleItem > 100)
            .ToList<Int32>();