我需要让对象按价格(十进制)值排序,以便快速访问。我需要能够找到价格多于A 或小于B 的所有对象。我想到了 SortedList ,但它没有提供从给定键值开始查找升序或降序枚举器的方法(比如说给我价格低于120美元的所有对象)。
想想一个接受卖家出售汽车的系统,并将它们存储到该系列中。然后买家希望找到比1000美元便宜的汽车。
基本上我需要的是基于树的集合和功能,以找到更小\更大\等于提供密钥的节点。
请建议。
答案 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>();