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

标签 rust

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

最佳答案

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

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

Playground

如果您需要使用比较函数而不是键函数进行排序(例如,由于后者的 limitations when returning references ),可以使用 Ordering::then_with() 很好地表达比较器:

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

关于rust - Vec<Vec<i32>> 按第一个元素升序排序,当第一个元素相等时按第二个元素降序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69325317/

相关文章:

rust - PathBuf::deref() 如何返回对临时对象的引用?

function - 如何获得指向 u32 功能的指针?

rust - 值(value)的生命周期与借用的生命周期

arrays - 如何在 Rust 中映射数组引用

rust - 为什么 `impl Trait` 返回值实现 Send 而 `Box<dyn Trait>` 没有?

rust - 从正文流中返回一个结构

plugins - 如何正确注册 Rust 编译器插件?

rust - 实现类工厂最简单的方法?

recursion - 为什么我不需要显式借出一个借来的可变变量?

rust - fatal error LNK1181 : cannot open input file 'gtk-3.lib'