假设我有一个存储在列表中的自定义对象,我想根据其中一个属性的绝对值对其进行排序(存储为double)。
在我的代码中我有这个:
MyList.Sort(Function(ob1, ob2) Math.Abs(ob1.Val).CompareTo(Math.Abs(ob2.Val)))
完美无缺! - 但现在我想按降序对其进行排序。
我知道linq有OrderByDescending
,但我似乎无法使用内联比较器功能。那怎么样?或者还有另一种更简单的方法吗?
答案 0 :(得分:1)
这样的事情应该有效:
MyList = MyList.OrderByDescending(Function(ob) Math.Abs(ob.Val)).ToList()
与Sort
不同,OrderByDescending
不会对列表进行排序。此外,该函数只需返回每个项目的排序键。
<强>更新强>
我错过了OrderByDescending
的超载IComparer
,所以你也可以这样做:
MyList = MyList.OrderByDescending(
Function(ob) ob.Val,
Comparer(Of Double).Create(
Function(key1, key2) Math.Abs(key1).CompareTo(Math.Abs(key2))
)
).ToList()