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

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

8
你可以使用 sort_by_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])));

2
额外加分项:Reverse - user2722968

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接