如何使用Scala通过map方法获取列表中重复元素对的索引
现有代码问题
- 你的代码仅实现了元素出现频次统计,没有记录元素首次出现的索引,无法生成要求的索引对
- 遍历对象是列表元素而非下标,无法获取索引值
- 方法声明的返回值为
(Int, Int)不符合需求,你需要返回多个索引对,返回类型应该调整为List[(Int, Int)] - 方法缺少返回语句,运行会报错
基于map方法的实现代码
import scala.collection.mutable.HashMap def catchDuplicates(num: List[Int]): List[(Int, Int)] = { // 存储元素及其首次出现的索引 val firstIdxMap = HashMap.empty[Int, Int] // 临时存储结果的可变集合 val resBuffer = collection.mutable.ListBuffer[(Int, Int)]() // 给元素绑定索引后用map遍历处理 num.zipWithIndex.map { case (ele, idx) => if (firstIdxMap.contains(ele)) { // 遇到重复元素,拼接索引对存入结果 resBuffer.append((firstIdxMap(ele), idx)) } else { // 首次出现的元素存入索引map firstIdxMap.put(ele, idx) } } resBuffer.toList } // 测试调用 val numList = List(1,2,3,4,5,1,2) println(catchDuplicates(numList)) // 输出:List((0,5), (1,6))
实现说明
- 调用
zipWithIndex方法给原列表每个元素绑定对应的下标,得到(元素, 索引)格式的对偶列表 - 用HashMap存储每个元素第一次出现的索引,后续遇到重复元素时直接提取首次索引和当前索引拼接为要求的对偶
- 遍历完成后转换为不可变List返回,符合Scala常规写法
内容的提问来源于stack exchange,提问作者Nisha Gupta
相关产品推荐
相关产品推荐

