Scala中如何将for循环的输出结果添加至列表?遍历元组列表提取第二个元素并生成新列表的技术求助
解决Scala中提取元组列表第二个元素到新列表的问题
嗨,我来帮你搞定这个问题!你已经成功遍历元组并取出了整数,现在只需要把这些值收集到新列表里就行,Scala有好几种简洁的方式可以实现,我给你一一说明:
方法一:使用map函数(最推荐的函数式写法)
这是Scala里处理这类转换最常用的方式,一行代码就能搞定:
val y = List(("this", 1), ("is", 2), ("a", 3), ("test", 4)) val intList = y.map(_._2)
解释一下:map方法会遍历列表中的每个元组,_._2是一个简写的匿名函数,_代表当前遍历到的元组,._2就是取这个元组的第二个元素。map会自动把所有提取出的整数组装成一个新的不可变列表返回给你。
方法二:用for推导式生成列表
如果你更习惯用for循环的写法,Scala的for推导式搭配yield关键字也能轻松生成新列表:
val y = List(("this", 1), ("is", 2), ("a", 3), ("test", 4)) val intList = for ((_, num) <- y) yield num
这里(_, num)是对元组的解构,_表示我们不需要元组的第一个字符串元素,num接收第二个整数元素,yield num会把每次循环得到的num收集起来,最终生成一个新列表。
方法三:使用可变列表(适合熟悉命令式编程的思路)
如果你想延续你原来的循环写法,也可以用可变的ListBuffer先收集元素,最后转成不可变列表:
import scala.collection.mutable.ListBuffer val y = List(("this", 1), ("is", 2), ("a", 3), ("test", 4)) val tempBuffer = new ListBuffer[Int]() for (tuple <- y) { tempBuffer += tuple._2 } val intList = tempBuffer.toList
不过这种方式更偏向命令式编程,在Scala里通常推荐前两种函数式的写法,代码更简洁易维护。
你可以根据自己的习惯选择合适的方法,运行这些代码后,intList就会是List(1,2,3,4)啦!
内容的提问来源于stack exchange,提问作者user17742253
相关产品推荐
相关产品推荐

