列表列表:如何为除最后一个列表之外的每个列表添加尾随0?
我正在学习Scala。我有一个列表列表,如下所示:
List(List(1,2,3), List(15, 17, 21), List(28, 5, 7))
我的目标是为每个列表添加一个尾随0,除了最后一个,如下所示:
List(List(1,2,3, 0), List(15, 17, 21, 0), List(28, 5, 7))
我的解决方案如下:
def addZero(lines: List[List[Int]]): List[Int] = {
def helper(nums: List[Int]): List[Int] = nums match {
case Nil => 0 :: Nil
case hd :: tl => hd :: helper(tl)
}
lines match {
case Nil => Nil
case hd :: Nil => hd
case hd :: tl => helper(hd) ++ addZero(tl)
}
}
但我不确定是否有更优雅的方式。我尝试了flatMap
和foldLeft
,但是每个列表都添加了0
包括最后一个。
答案 0 :(得分:4)
list.init.map { _ :+ 0 } :+ list.last
答案 1 :(得分:1)
你可以这样做:
List(List(1, 2, 3), List(15, 17, 21), List(28, 5, 7)) match {
case begin :+ last => begin.map(_ :+ 0) :+ last
}
详细信息:首先模式匹配列表列表,以便轻松提取列表中不是最后一个元素的元素。
"begin" represents List(List(1, 2, 3), List(15, 17, 21))
"last" represents List(28, 5, 7)
然后在每个列表的最后位置添加0
_ :+ 0 // List(15, 17, 21) => List(15, 17, 21, 0)
最后你加回最后一个元素