1. 概述
在本篇简短教程中,我们将介绍如何在 Scala 的 List
中查找某个元素的索引。
2. 使用 indexOf 和 lastIndexOf
首先需要注意的是,List
是允许元素重复的。其次,Scala 标准库中的方法只会返回元素某一次出现的索引。具体是第一次还是最后一次,则取决于我们使用的方法。
2.1 查找首次出现的索引
使用 indexOf
方法可以获取元素第一次出现的索引:
scala> List(1,2,3,2,1).indexOf(2)
res1: Int = 1
如果查找的元素并不存在,则返回 -1
:
scala> List(1,2,3,2,1).indexOf(5)
res2: Int = -1
2.2 查找最后一次出现的索引
使用 lastIndexOf
方法可以获取元素最后一次出现的索引:
scala> List(1,2,3,2,1).lastIndexOf(2)
res3: Int = 3
与 indexOf
一样,如果元素不存在,也返回 -1
。
3. 使用 indexWhere 和 lastIndexWhere
如果查找逻辑比较复杂,比如需要根据某个条件判断元素是否匹配,可以使用 indexWhere
和 lastIndexWhere
方法。
这两个方法接受一个谓词函数(predicate),返回满足条件的第一个或最后一个元素的索引:
scala> List(1,2,3,4,5,6).indexWhere(element => element > 3)
res4: Int = 3
scala> List(1,2,3,4,5,6).lastIndexWhere(element => element > 3)
res5: Int = 5
⚠️ 如果没有满足条件的元素,这两个方法也会返回 -1
。
4. 查找所有匹配元素的索引
如果我们想获取某个元素所有出现位置的索引,标准库没有直接提供方法,需要我们自己组合操作来实现:
scala> List(1,2,3,2,1).zipWithIndex.filter(pair => pair._1 == 2).map(pair => pair._2)
res6: List[Int] = List(1, 3)
✅ 这段代码的逻辑如下:
zipWithIndex
:将 List 转换为(元素, 索引)
的元组列表;filter
:筛选出元素值为2
的元组;map
:提取这些元组中的索引值。
这种方式虽然不是开箱即用,但胜在灵活、简洁,属于 Scala 风格的写法。
5. 总结
在这篇文章中,我们介绍了几种在 Scala 的 List
中查找元素索引的方法:
- ✅
indexOf
/lastIndexOf
:适用于精确查找元素首次/末次出现位置; - ✅
indexWhere
/lastIndexWhere
:适用于按条件查找; - ✅ 自定义组合操作:可用于查找所有匹配元素的索引。
💡 对于有经验的开发者来说,掌握这些方法可以让你在处理集合时更加得心应手。