You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效从已排序C# List中按属性筛选子集?

基于有序List的高效筛选方案
  • 核心逻辑:既然element_list已经按size升序排好序,所有满足size < size_threshold的元素肯定集中在列表前半段。不用遍历整个集合,直接用二分查找定位到第一个大于等于阈值的元素索引,再通过GetRange()截取前半段子集,时间复杂度从O(n)降到O(log n),重复执行时效率提升非常明显。

  • 具体代码实现:
    借助List.BinarySearch方法,配合自定义比较器就能快速定位索引:

    // 假设你的元素类型为Element,包含int类型的size属性
    var sizeComparer = Comparer<Element>.Create((a, b) => a.size.CompareTo(b.size));
    // 创建一个用于查找的虚拟元素,size设为阈值
    var thresholdMarker = new Element { size = size_threshold };
    
    // 执行二分查找
    int splitIndex = element_list.BinarySearch(thresholdMarker, sizeComparer);
    
    // 处理查找结果:没找到匹配元素时,返回值是负数,取补码得到第一个大于阈值的元素索引
    if (splitIndex < 0)
    {
        splitIndex = ~splitIndex;
    }
    
    // 截取前splitIndex个元素,就是所有size小于阈值的子集
    var result = element_list.GetRange(0, splitIndex);
    
  • 为什么放弃Dictionary?因为Dictionary是哈希结构,不维护元素的顺序,完全无法利用原List已排序的特性,自然达不到高效筛选的目的。

内容的提问来源于stack exchange,提问作者For Comment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:37:06