在 Scala 中映射整个列表
Map whole list in Scala
我希望能够这样做
List(1, 2, 3).someFunc?(list => List(list, list)) // List(List(1,2,3), List(1,2,3))
总体思路是我想要像 map
一样的东西,但不是作用于列表的元素,而是作用于整个列表本身。另一种方法是这样写:
val list = List(1, 2, 3)
val res = List(list, list)
但我想要一些可以在链中使用的函数。有这样的功能吗?
编辑:
理想情况下,我想链接映射元素和整个列表的 "kind of map" 可互换,例如
List(1, 2, 3).map(_ + 1).someFunc?(list => List(list, list))
我认为有一个选项很符合您的需求:
Option(List(1, 2, 3)).map(lst => List(lst, lst))
您可能还想考虑流:
Stream.continually(List(1, 2, 3)).take(2).toList
然后您可以根据需要映射此列表列表。
您可以轻松定义自己的运算符:
implicit class RichList[T](l: List[T]){
def applyFun[U](f: List[T] => U): U = f(l)
}
你甚至可以对可以应用的函数的输出类型添加一些限制,例如,如果你想确保输出仍然是一个列表(只需将 U
替换为 List[U]
作为f
的输出和applyFun[U]
的输出)。
我想你可以在这里使用模式匹配:
List(1, 2, 3) match { case x => List(x, x) }
// res25: List[List[Int]] = List(List(1, 2, 3), List(1, 2, 3))
我希望能够这样做
List(1, 2, 3).someFunc?(list => List(list, list)) // List(List(1,2,3), List(1,2,3))
总体思路是我想要像 map
一样的东西,但不是作用于列表的元素,而是作用于整个列表本身。另一种方法是这样写:
val list = List(1, 2, 3)
val res = List(list, list)
但我想要一些可以在链中使用的函数。有这样的功能吗?
编辑: 理想情况下,我想链接映射元素和整个列表的 "kind of map" 可互换,例如
List(1, 2, 3).map(_ + 1).someFunc?(list => List(list, list))
我认为有一个选项很符合您的需求:
Option(List(1, 2, 3)).map(lst => List(lst, lst))
您可能还想考虑流:
Stream.continually(List(1, 2, 3)).take(2).toList
然后您可以根据需要映射此列表列表。
您可以轻松定义自己的运算符:
implicit class RichList[T](l: List[T]){
def applyFun[U](f: List[T] => U): U = f(l)
}
你甚至可以对可以应用的函数的输出类型添加一些限制,例如,如果你想确保输出仍然是一个列表(只需将 U
替换为 List[U]
作为f
的输出和applyFun[U]
的输出)。
我想你可以在这里使用模式匹配:
List(1, 2, 3) match { case x => List(x, x) }
// res25: List[List[Int]] = List(List(1, 2, 3), List(1, 2, 3))