我正在尝试实现一种从Scala列表中提取n
的方法,但是i f n > list.length
请指定默认值。类似于takeOrElse。
说val l = List(4, 6, 10)
val taken = l.takeOrElse(5, 0) //List(4, 5, 6, 0, 0)
有没有一种方法可以惯常地做到这一点而无需突变和缓冲?感谢您的投入。
答案 0 :(得分:4)
您可以在take
上使用padTo
和List
函数。
take
返回一个新的List
,其中包含列表的前n个元素;如果n小于列表的长度,则返回整个列表。
padTo
函数将向List
添加元素,直到其长度等于其第一个参数中的值。如果列表已经足够长,它将不会执行任何操作。
赞:
val taken = l.take(5).padTo(5, 0)
答案 1 :(得分:3)
您可以使用.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
您还可以在takeOrElse
上写扩展方法List[Int]
,
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)