多指数的指数

时间:2013-07-24 17:00:22

标签: scala

是否有快速scala习惯用法可以使用索引检索遍历的多个元素。

我正在寻找像

这样的东西
 val L=1 to 4 toList
 L(List(1,2)) //doesn't work

到目前为止,我一直在使用map,但想知道是否有更多的“scala”方式

List(1,2) map {L(_)}

提前致谢

3 个答案:

答案 0 :(得分:9)

由于ListFunction,您可以只写

List(1,2) map L

虽然,如果您要按索引查找内容,您应该使用IndexedSeq Vector而不是List

答案 1 :(得分:3)

您可以添加添加功能的implicit class

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)

答案 2 :(得分:1)

你可以使用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的值。 e.g。

L.takeIndices(List(1,2))
List[Int] = List(2,3)