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

C#如何按与目标值的差值绝对值排序KeyValuePair列表

问题根因

  1. 比较器返回值不符合规则:List<T>.Sort方法传入的Comparison<T>委托对返回值有严格要求:
    • 返回值小于0:第一个参数应排在第二个参数之前
    • 返回值等于0:两个参数相对顺序保持不变
    • 返回值大于0:第一个参数应排在第二个参数之后
      你现有代码直接返回元素的Value数值,完全不满足上述规则,因此排序逻辑无法生效。
  2. 代码存在笔误:你现有代码中计算第二个元素差值时漏写了.Value,写为了prod2 - target,KeyValuePair类型无法直接和int做减法,本身就存在编译错误。

正确实现

方案1:使用Sort方法原生实现

farm.Sort((prod1, prod2) => 
{
    int diff1 = Math.Abs(prod1.Value - target);
    int diff2 = Math.Abs(prod2.Value - target);
    return diff1.CompareTo(diff2);
});

方案2:使用LINQ的OrderBy(写法更简洁不易出错)

farm = farm.OrderBy(item => Math.Abs(item.Value - target)).ToList();

两种实现得到的排序结果和你给出的期望结果完全一致。


内容的提问来源于stack exchange,提问作者MK Span

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:39:02