列表列表:除了最后一个列表之外,如何为每个列表添加尾随0?

时间:2018-02-11 15:19:36

标签: scala scala-collections higher-order-functions

列表列表:如何为除最后一个列表之外的每个列表添加尾随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)
     }
}

但我不确定是否有更优雅的方式。我尝试了flatMapfoldLeft,但是每个列表都添加了0 包括最后一个。

2 个答案:

答案 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)

最后你加回最后一个元素