为什么:+附加到Seq没有效果?

时间:2013-06-04 14:28:00

标签: scala sequence seq

我想要一个结果 - 具有三重(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的所有后续三元组都不是。 我也尝试过不同的方法,比如“++”,它们也不起作用(“太多的参数”)

无法弄清楚我在这里做错了什么。

提前感谢您的帮助! 问候。

2 个答案:

答案 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中没有方法+=,因此即使是可变收集也会获得:+=