Scala中如何在map函数内同时访问List的索引与元素
在Scala的map中同时访问元素与索引的方法
嘿,这个需求其实很容易实现,你已经用到了zipWithIndex这个关键方法,它本身就是用来把列表元素和对应的索引打包在一起的!
zipWithIndex会将原列表的每个元素转换成一个二元组,其中:
- 元组的第一个元素(
._1)是原列表里的元素本身 - 元组的第二个元素(
._2)是该元素在列表中的索引(从0开始计数)
你之前用map(_._2)只取了索引,要同时访问两者,只需要在map里解构这个元组就行,推荐用Scala的模式匹配写法,代码可读性更高:
val arr = List(8, 15, 22, 1, 10, 6, 18, 18, 1) // 用模式匹配解构元组,同时拿到元素和索引 val elementWithIndex = arr.zipWithIndex.map { case (element, index) => // 这里可以随意使用element和index s"元素值:$element,所在索引:$index" } // 输出结果:List("元素值:8,所在索引:0", "元素值:15,所在索引:1", ..., "元素值:1,所在索引:8")
如果你不习惯模式匹配,也可以直接通过元组的属性来访问:
val anotherWay = arr.zipWithIndex.map(tuple => { val element = tuple._1 val index = tuple._2 // 同样可以使用两者做逻辑处理 element * (index + 1) // 比如计算元素乘以(索引+1)的结果 })
举个实际的计算例子,比如我们要生成每个元素和索引的乘积列表:
val productList = arr.zipWithIndex.map { case (num, idx) => num * idx } // 结果:List(0, 15, 44, 3, 40, 30, 108, 126, 8)
这样就能轻松在map函数里同时操作元素和它的索引啦!
内容的提问来源于stack exchange,提问作者boredmgr
相关产品推荐
相关产品推荐

