Scala中如何根据内层数组元素获取外层数组索引?
Scala 根据二维数组内层元素获取外层数组索引
针对你的需求,这里提供几种实用的Scala解决方案,直接基于数组原生操作实现:
1. 安全获取首个匹配的外层索引(推荐)
使用zipWithIndex将每个外层数组与它的索引绑定,再通过find找到第一个包含目标元素的外层数组,最终返回Option[Int]类型(找不到元素时返回None,避免抛出异常):
val arr = Array(Array("1","page"),Array("1","thankyou")) def getFirstOuterIndex(target: String): Option[Int] = { arr.zipWithIndex.find { case (innerArr, _) => innerArr.contains(target) }.map(_._2) } // 调用示例 getFirstOuterIndex("page") // 输出 Some(0) getFirstOuterIndex("thankyou") // 输出 Some(1) getFirstOuterIndex("unknown") // 输出 None
2. 获取所有匹配的外层索引
如果需要找出所有包含目标元素的外层数组索引,可以用filter筛选后提取索引:
def getAllOuterIndices(target: String): Array[Int] = { arr.zipWithIndex.filter { case (innerArr, _) => innerArr.contains(target) }.map(_._2) } // 调用示例 getAllOuterIndices("1") // 输出 Array(0, 1)
3. 非安全获取(仅当确定元素必存在时使用)
如果你能确保目标元素一定存在于数组中,可以直接提取索引,但找不到时会抛出NoSuchElementException,不推荐在不确定场景使用:
val index = arr.zipWithIndex.find(_._1.contains("page")).get._2 // 输出 0
说明
zipWithIndex是Scala集合的常用操作,它会将集合中的每个元素与对应的索引组成元组(元素, 索引)innerArr.contains(target)用于判断内层数组是否包含目标元素- 返回
Option的方式更符合Scala的函数式编程风格,能优雅处理元素不存在的情况
内容的提问来源于stack exchange,提问作者A B
相关产品推荐
相关产品推荐

