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
上使用 take
和 padTo
功能。
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?
我正在尝试实现一种从 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
上使用 take
和 padTo
功能。
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?