C#如何按与目标值的差值绝对值排序KeyValuePair列表
问题根因
- 比较器返回值不符合规则:
List<T>.Sort方法传入的Comparison<T>委托对返回值有严格要求:- 返回值小于0:第一个参数应排在第二个参数之前
- 返回值等于0:两个参数相对顺序保持不变
- 返回值大于0:第一个参数应排在第二个参数之后
你现有代码直接返回元素的Value数值,完全不满足上述规则,因此排序逻辑无法生效。
- 代码存在笔误:你现有代码中计算第二个元素差值时漏写了
.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
相关产品推荐
相关产品推荐

