按第一个元素升序对 Vec<Vec<i32>> 进行排序,当第一个元素相等时按第二个元素降序排序

Cyb*_*lin 3 rust

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

use*_*342 8

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

v.sort_by_key(|x| (x[0], Reverse(x[1])));
Run Code Online (Sandbox Code Playgroud)

操场

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

v.sort_by(|a, b| a[0].cmp(&b[0]).then_with(|| b[1].cmp(&a[1])));
Run Code Online (Sandbox Code Playgroud)

  • “反向”加分 (2认同)