Scala - List take - OrElse - 带默认值

Scala - List take - OrElse - with default value

我正在尝试实现一种从 Scala 列表中获取 n 的方法,但我f n > list.length 指定了一个默认值。像 takeOrElse.

说,val l = List(4, 6, 10)

val taken = l.takeOrElse(5, 0) //List(4, 5, 6, 0, 0)

有没有办法在没有突变和缓冲区的情况下按惯用方式执行此操作?感谢您的意见。

您可以在 List 上使用 takepadTo 功能。

take returns 新的 List 包含列表的前 n 个元素,如果 n 小于列表的长度,则为整个列表。

padTo 函数将向 List 添加元素,直到其长度等于其第一个参数中的值。如果列表已经足够长,它将什么都不做。

像这样:

val taken = l.take(5).padTo(5, 0)

您可以使用 .padTo

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> l.take(5).padTo(len = 5, elem = 0)
res5: List[Int] = List(1, 2, 3, 0, 0)

类似问题:Scala - Pad an array to a certain size

也可以在List[Int]上写扩展方法takeOrElse

scala>     implicit class ListOps(list: List[Int]) {
     |       def takeOrElse(length: Int, elem: Int): List[Int] = {
     |         list.take(length).padTo(len = length, elem = elem)
     |       }
     |     }
defined class ListOps

scala> val newList = l.takeOrElse(5, 0)
newList: List[Int] = List(1, 2, 3, 0, 0)

另见:Scala extension methods?