【发布时间】:2018-07-25 06:27:03
【问题描述】:
我是 Scala 新手,想了解如何处理元组列表,所以我创建了一个虚构的人员列表:
val fichier : List[(String, Int)] = List(("Emma Jacobs",21), ("Mabelle Bradley",53), ("Mable Burton",47), ("Ronnie Walton",41), ("Bill Morton",36), ("Georgia Bates",30), ("Jesse Caldwell",46), ("Jeffery Wolfe",50), ("Roy Norris",18), ("Ella Gonzalez",48))
我想自己编写代码一个函数,按年龄对这个列表进行升序排序:
def classeur(personne: List[(String, Int)]) : List[(String, Int)] =
personne match {
case (name1, age1) :: (name2, age2) :: t if age1 <= age2 => { (name1, age1) :: (name2, age2) :: classeur (t ) }
case (name1, age1) :: (name2, age2) :: t if age2 < age1 => { (name2, age2) :: (name1, age1) :: classeur (t ) }
case x => x
}
但它会逐对对元组进行排序,而不是取最大的一个(按年龄)并将其与下一个元组进行比较。
我做错了什么?
【问题讨论】:
-
它对我有用。你确定你得到完全相同的列表?
-
你说的什么都没发生是什么意思?我认为您的算法无法正确排序列表,它只会获取两个元素并重新排序它们,但不会针对整个列表。
-
@KevinHoerr 我编辑了我的主题。它不会返回完全相同的列表,而是将元组两两排序
-
@nicodp 对。有什么建议可以解决这个问题,不管 sortBy 方法是什么?
标签: scala list pattern-matching tuples