我有一个列表,另一个列表包含我感兴趣的索引。例如
val a=List("a","b","c","d")
val b=List(2,3)
然后我需要返回一个值为List(“b”,“c”)的列表,因为List(2,3)表示我喜欢从元素“a”中取第2和第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)