Scala:通过一系列索引获取特定元素

时间:2014-09-06 22:03:44

标签: scala scala-collections

如何通过索引序列获取数组的特定元素,我现在通过以下方式完成:

val indices = Array(1,3,3,2)
val a = Array("a","b","c","d","e","f")
indices.map(a(_))

问题是,如果我想让它成为一个安全的搜索,我必须检查a.contains或修改索引。有时指数很大,我无法快速修改。什么是最佳时间/空间解决方案?

4 个答案:

答案 0 :(得分:6)

这是:

scala> val indices = Array(1, 2, 3, 2, 100, -100, 4, 5)
indices: Array[Int] = Array(1, 2, 3, 2, 100, -100, 4, 5)

scala> val arr = Array("a", "b", "c", "d")
arr: Array[String] = Array(a, b, c, d)

scala> indices collect arr
res1: Array[String] = Array(b, c, d, c)

答案 1 :(得分:0)

假设您只想忽略每个越界索引,您可以在映射之前使用过滤器:

indices.filter(_ < a.length).map(a(_))

答案 2 :(得分:0)

使用flatMap将绑定索引映射到None,如下所示,

indices.flatMap(i => if (i < a.length) Some(a(i)) else None)

使用flatMap

的简单表单
indices.flatMap(i => Some(a(i)))
res: Array(b, d, d, c)

indices.flatMap(a(_))
res: Array(b, d, d, c)

答案 3 :(得分:0)

如果您不想使用收集,您可以尝试:

val indices = Array(1, 2, 3, 2)
val arr = Array("a", "b", "c", "d")
val res = for (i <- indices) yield arr(i)