Yuv*_*uva 1 functional-programming scala tuples list pattern-matching
我是Scala的新手,并试图了解如何处理元组列表,所以我创建了一个虚构的人员列表:
val fichier = List(("Emma Jacobs","21"), ("Mabelle Bradley","53"), ("Mable Burton","47"))
Run Code Online (Sandbox Code Playgroud)
我想捕获每个元素(元组)的组件并将它们用于其他目的,所以我写了这个:
def classeur(personne: List[(String, String)]) : String =
personne match {
case Nil => "Empty file"
case h :: t => {
h._1 + "is " + h._2 + "years old"
classeur(t)
}
}
Run Code Online (Sandbox Code Playgroud)
结果:空文件.
我误解了什么,因为我fichier
不是空的?为什么它认为fichier
是Nil
?
你的代码几乎是对的.唯一的问题是你忘了将String连接到递归调用的结果:
def classeur(personne: List[(String, String)]) : String =
personne match {
case Nil => "Empty file"
case h::t => h._1 + "is " + h._2 + "years old " + classeur(t)
}
Run Code Online (Sandbox Code Playgroud)
这是另一个选项,通过在case语句中提取元组的值,我认为可能更清楚:
def classeur(personne: List[(String, String)]) : String =
personne match {
case Nil => "Empty file"
case (name, age)::t => name + "is " + age + "years old " + classeur(t)
}
Run Code Online (Sandbox Code Playgroud)
编辑:
以下是评论中建议的地图选项:
personne.map{case (name, age) => s"$name is $age years old"}.mkString(",")
Run Code Online (Sandbox Code Playgroud)
输出:
Emma Jacobs is 21 years old,Mabelle Bradley is 53 years old,Mable Burton is 47 years old
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
159 次 |
最近记录: |