【问题标题】:Sort List(Double, (String, List[String])) first by Double then by first String value in the tuple排序 List(Double, (String, List[String])) 首先按 Double 然后按元组中的第一个 String 值
【发布时间】:2021-02-14 16:30:58
【问题描述】:

使用内置函数按两个条件对 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))))

【问题讨论】:

  • 你试过什么?为什么它不起作用?你检查过scaladoc吗?

标签: list scala sorting


【解决方案1】:

你可以像这样使用sortBy

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

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

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

【讨论】:

    【解决方案2】:

    为了获得请求的订单,我这样做了:

    input.sortWith{case (a,b) => a._1 > b._1 ||
                                 a._1 == b._1 &&
                                 a._2._1 < b._2._1}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      相关资源
      最近更新 更多