1. 概述

在本篇简短教程中,我们将介绍如何在 ScalaList 中查找某个元素的索引。

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

如果查找逻辑比较复杂,比如需要根据某个条件判断元素是否匹配,可以使用 indexWherelastIndexWhere 方法。

这两个方法接受一个谓词函数(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:适用于按条件查找;
  • ✅ 自定义组合操作:可用于查找所有匹配元素的索引。

💡 对于有经验的开发者来说,掌握这些方法可以让你在处理集合时更加得心应手。


原始标题:Finding the Index of an Element in a List with Scala