首页 > 解决方案 > 排序向量> 按第一个元素升序排列,当第一个元素相等时按第二个元素降序排列

问题描述

例如 [[5,6][2,3][2,5][2,9][1,6]] 先按第一个元素升序排序,当一个元素相等时,按第二个元素按降序排列,结果为 [1,6],[2,9],[2,5],[2,3],[5,6]

标签: rust

解决方案


您可以使用sort_by_key()key 函数,该函数返回第一个子元素的元组,然后是第二个子元素,std::cmp::Reverse以反转其比较:

v.sort_by_key(|x| (x[0], Reverse(x[1])));

操场

如果您需要使用比较函数而不是键函数进行排序(例如,由于后者在返回引用时的限制),比较器可以很好地表示为Ordering::then_with()

v.sort_by(|a, b| a[0].cmp(&b[0]).then_with(|| b[1].cmp(&a[1])));

推荐阅读