是否有一个快速的 scala 习惯用法可以使用索引检索 aa 可遍历的多个元素。
我正在寻找类似的东西
val L=1 to 4 toList
L(List(1,2)) //doesn't work
map
到目前为止我一直在使用,但想知道是否有更“scala”的方式
List(1,2) map {L(_)}
提前致谢
是否有一个快速的 scala 习惯用法可以使用索引检索 aa 可遍历的多个元素。
我正在寻找类似的东西
val L=1 to 4 toList
L(List(1,2)) //doesn't work
map
到目前为止我一直在使用,但想知道是否有更“scala”的方式
List(1,2) map {L(_)}
提前致谢
因为 aList
是 aFunction
你可以只写
List(1,2) map L
虽然,如果您要按索引查找内容,您可能应该使用IndexedSeq
likeVector
而不是List
.
您可以添加一个添加功能的隐式类:
implicit class RichIndexedSeq[T](seq: IndexedSeq[T]) {
def apply(i0: Int, i1: Int, is: Int*): Seq[T] = (i0+:i1+:is) map seq
}
然后,您可以将序列的apply
方法与一个索引或多个索引一起使用:
scala> val data = Vector(1,2,3,4,5)
data: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5)
scala> data(0)
res0: Int = 1
scala> data(0,2,4)
res1: Seq[Int] = ArrayBuffer(1, 3, 5)
您可以通过for
理解来做到这一点,但它并不比您使用的代码更清晰map
。
scala> val indices = List(1,2)
indices: List[Int] = List(1, 2)
scala> for (index <- indices) yield L(index)
res0: List[Int] = List(2, 3)
我认为最易读的是实现您自己的函数takeIndices(indices: List[Int])
,该函数采用索引列表并返回这些索引处的给定值List
。例如
L.takeIndices(List(1,2))
List[Int] = List(2,3)