rust - 排序向量> 按第一个元素升序排列,当第一个元素相等时按第二个元素降序排列
问题描述
例如 [[5,6][2,3][2,5][2,9][1,6]] 先按第一个元素升序排序,当一个元素相等时,按第二个元素按降序排列,结果为 [1,6],[2,9],[2,5],[2,3],[5,6]
解决方案
您可以使用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])));
推荐阅读
- mysql - 将文本文件(具有结构文本格式)导入mysql工作台?
- python - Selenium 的 webdriver.Chrome() 从 Python 的 CMD 实例打开就好了,但从 Spyder 运行时抛出错误
- c - 在 Ubuntu WSL 中出错
- mysql - MySQL INSERT AFTER 触发器将行复制到另一个数据库
- c# - 从控制器或视图异步调用外部 REST API?
- react-native - React Native (Expo) 说字体没有被 Font.loadAsync 加载(但我认为它有)
- python - 即使在打印整个字典时显示它也无法获取 value href 属性
- kubernetes - 发现 Kubernetes 服务 DNS 记录
- laravel - 通过 webpack 运行时,Sass 不会用值替换变量
- tcl - 转录器的安装 (http://trans.sourceforge.net/en/install.php)