Scala中如何通过索引数组优雅提取Seq中的元素?
优雅地通过索引数组从Scala Seq中获取元素
先明确你给出的基础代码:
val nums = Seq(1, 2, 3, 4, 5, 7, 9, 11, 14, 12, 16) val i = Array.range(2, 10, 3) // 生成索引数组: Array(2, 5, 8)
要获取Seq中对应索引的元素,有几种简洁优雅的实现方式:
方式一:使用map方法
直接对索引数组调用map,通过索引访问Seq元素:
val result = i.map(nums(_)) // 输出结果: Array(3, 7, 14)
这里nums(_)是idx => nums(idx)的简写,map会遍历索引数组的每个元素,取出Seq对应位置的值,返回类型与索引数组一致(此处为Array)。
方式二:转换为Seq类型结果
如果需要结果是Seq而非Array,可以先把索引数组转为Seq再调用map,或者将最终结果转为Seq:
// 先转索引数组为Seq val resultSeq = i.toSeq.map(nums) // 结果: Seq(3, 7, 14) // 或先处理再转Seq val resultSeq2 = i.map(nums).toSeq
方式三:for推导式
用for推导式写法更直观,可读性强:
val result = for (idx <- i) yield nums(idx) // 输出结果: Array(3, 7, 14)
注意事项
确保索引数组中的所有索引都在Seq的有效范围内(即索引值需满足 0 <= idx < nums.length),否则会抛出IndexOutOfBoundsException。
内容的提问来源于stack exchange,提问作者Станислав
相关产品推荐
相关产品推荐

