如何通过索引序列获取数组的特定元素,我现在通过以下方式完成:
val indices = Array(1,3,3,2)
val a = Array("a","b","c","d","e","f")
indices.map(a(_))
问题是,如果我想让它成为一个安全的搜索,我必须检查a.contains或修改索引。有时指数很大,我无法快速修改。什么是最佳时间/空间解决方案?
答案 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)