Scala列表转换代码报错:value map is not a member of Int 求助
解决Scala元组列表转换的报错问题
我来帮你搞定这个Scala代码的问题!首先咱们先搞清楚报错的核心原因:
你写的代码里,elt._2是一个Int类型的值(比如例子里的2或者1),但Scala的for推导式需要遍历可迭代的集合(比如List、Range这些),直接遍历Int肯定不行——这就是为什么编译器会报错value map is not a member of Int,因为Int根本没有map方法呀!
你的需求是把每个(char, int)元组,拆成多个包含(char, 1)、(char, 2)…直到(char, int)的单元素List,再把这些List汇总成一个大List。那我们只需要把Int转换成一个从1到它的Range(这是可迭代的),然后逐个生成对应的List就行了。
修正后的代码方案
方案一:用flatMap + map(函数式风格)
val abba = List(('a', 2), ('b', 2)) val result = abba.flatMap { case (char, count) => // 生成1到count的序列,每个数对应一个单元素List (1 to count).map(t => List((char, t))) }
方案二:用for推导式(更直观易读)
val abba = List(('a', 2), ('b', 2)) val result = for { (char, count) <- abba t <- 1 to count } yield List((char, t))
测试效果
当输入是List(('a',2),('b',1))时,运行上面的代码会得到:
List(List(('a',1)), List(('a',2)), List(('b',1)))
完全符合你的期望!
内容的提问来源于stack exchange,提问作者chiplusplus
相关产品推荐
相关产品推荐

