我有一个类型的元组:
val data1 : (String , scala.collection.mutable.ArrayBuffer[(String , Int)]) = ( ("" , scala.collection.mutable.ArrayBuffer( ("a" , 1) , ("b" , 1) , ("a" , 1) ) )) // , ("" , scala.collection.mutable.ArrayBuffer("" , 1)) )
当我尝试使用data1.map(m => println(m))
进行地图时,我收到错误:
Multiple markers at this line - value map is not a member of (String, scala.collection.mutable.ArrayBuffer[(String,
Int)]) - value map is not a member of (String, scala.collection.mutable.ArrayBuffer[(String, Int)])
是否可以使用Tuple访问器语法使用map函数:._2?
这种语法data1.map(m._2 => println(m._2)))
无法编译
使用这种语法我试图应用一个map函数来汇总与ArrayBuffer相关的所有字母。所以上面的例子应该映射到 - > ((a,2),(b,1))
答案 0 :(得分:2)
目前还不清楚你想要什么。你期待什么输出?
是否要打印data1
的第二项?
println(data1._2)
或者在data1
?
data1._2.foreach(m => println(m))
你想让data1成为元组的集合并映射吗?
import scala.collection.mutable.ArrayBuffer
val data1 = Vector(("" , ArrayBuffer(("", 1))), ("", ArrayBuffer("", 1)))
data1.foreach { case (a,b) => println(b) }
请注意,如果您只是打印出来的内容,则需要foreach
,而不是map
。
根据您的修改:
import scala.collection.mutable.ArrayBuffer
val data1 = (("", ArrayBuffer(("a", 1), ("b", 1), ("a", 1))))
val grouped = data1._2.groupBy(_._1).map { case (k, vs) => (k, vs.map(_._2).sum) }
// Map(b -> 1, a -> 2)
答案 1 :(得分:0)
您无法在元组上使用地图。元组没有这种方法。
map函数也应该转换值并返回它,但你只想打印它,而不是改变它。
要在您的案例中打印ArrayBuffer,请尝试:
data1._2.foreach(x=>println(x))
或只是
data1._2.foreach(println)
答案 2 :(得分:-1)
尝试
data1.foreach( { case ( x, y ) => println( y ) } )