list - 排序 List(Double, (String, List[String])) 首先按 Double 然后按元组中的第一个 String 值
问题描述
使用内置函数按两个条件对 scala 中的列表进行排序
输入:
List((1.2 , (C, List(A))),
(0.7 , (B, List(A))),
(0.9 , (D, List(M))),
(1.2 , (E, List(D,F))),
(0.5 , (A, List(A,C))),
(0.0 , (N, List(Z))))
如果第一个双精度值相等,则使用第一个字符串值进行排序。就像有两个 1.2 值一样,所以检查 C 和 E
输出:
List((1.2 , (C, List(A))),
(1.2 , (E, List(D,F))),
(0.9 , (D, List(M))),
(0.7 , (B, List(A))) ,
(0.5 , (A, List(A,C))),
(0.0 , (N, List(Z))))
解决方案
你可以sortBy
这样使用:
input.sortBy{ case (d, (s, _)) => (-d, s) }
这将从输入中提取一个新的数据值,然后按该值排序。
这可能比sortWith
您只需要提供类型而不是每种类型的比较函数更简单。
推荐阅读
- c - 如何使用另一个指针访问函数指针数组的元素,然后调用其中一个函数?
- javascript - 将图像添加到 Twitter 共享
- javascript - 路径长度变化时保持 stroke-dasharray 一致
- pentaho - Pentaho 数据集成:即使成功,作业也会继续运行
- angular - 值评估后,ag-grid cellRenderer 渲染单元失败
- java - 从记事本++或java中的文件中删除非法字符
- git - Git:如何获得 date 的第二个最新版本?(当被拒绝后缀标签时)
- c# - 在表达式中为重载集合参数使用泛型
- visual-studio-code - 如何在 Visual Studio Code 中使用特定的 Solidity 版本进行编译?
- c# - 通过查找和附加到 64 位进程将 C# 转换为 VB