首页 > 解决方案 > 排序 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))))

标签: listscalasorting

解决方案


你可以sortBy这样使用:

input.sortBy{ case (d, (s, _)) => (-d, s) }

这将从输入中提取一个新的数据值,然后按该值排序。

这可能比sortWith您只需要提供类型而不是每种类型的比较函数更简单。


推荐阅读