我想要一个结果 - 具有三重(String,Int,Int)的序列,如下所示:
var all_info: Seq[(String, Int, Int)] = null
现在我尝试将元素添加到我的Seq中,如下所示:
if (all_info == null) {
all_info = Seq((name, id, count))
} else {
all_info :+ (name, id, count)
}
并打印出来
Console.println(all_info.mkString)
不幸的是,打印结果只是if子句添加的第一个三元组,并且基本上初始化了一个新的Seq,因为之前它只是“空”。 应该添加到else子句中的Seq的所有后续三元组都不是。 我也尝试过不同的方法,比如“++”,它们也不起作用(“太多的参数”)
无法弄清楚我在这里做错了什么。
提前感谢您的帮助! 问候。
答案 0 :(得分:4)
首先,不是使用null
,而是使用空集合。下一步使用:+ =所以结果:+ 不会被丢弃 - :+生成一个新的集合作为结果,而不是修改现有的集合。最终的代码看起来像
var all_info: Seq[(String, Int, Int)] = Seq.empty
all_info :+= (name, id, count)
正如您所看到的,现在您不需要if
,代码应该可以正常工作。
答案 1 :(得分:2)
方法:+
创建新的集合并保持原始集合不受影响。
您应该使用方法+=
。如果+=
编译器中没有方法all_info
,则会将all_info += (name, id, count)
视为all_info = all_info + (name, id, count)
。
相反,如果您将all_info
的类型更改为某个可变集合,则会在其中获取方法+=
,因此您的代码将按预期工作:方法{{1在可变集合上更改目标集合。
请注意mutable collections中没有方法+=
,因此即使是可变收集也会获得:+=
。