如何根据Scala中的元素索引获取列表中的一组元素?

时间:2014-11-09 10:06:22

标签: scala

我有一个列表,另一个列表包含我感兴趣的索引。例如

val a=List("a","b","c","d")
val b=List(2,3)

然后我需要返回一个值为List(“b”,“c”)的列表,因为List(2,3)表示我喜欢从元素“a”中取第2和第3个元素。怎么做?

3 个答案:

答案 0 :(得分:4)

val results = b.map(i => a(i - 1))

答案 1 :(得分:2)

我喜欢代码中表达式的顺序以反映评估的顺序,因此我喜欢使用scalaz管道运算符来执行此类事务|>

b.map(_ - 1 |> a)

当一个人习惯于编写bash脚本时,这是特别自然的。

答案 2 :(得分:1)

考虑使用此apply方法检查(避免)可能的IndexOutOfBoundsException

implicit class FetchList[A](val in: List[A]) extends AnyVal { 
  def apply (idx: List[Int]) = for (i <- idx if i < in.size) yield in(i-1) 
}

因此

a(b)
res: List[String] = List(b, c)