1

我想要一个带有三重(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,因为它之前只是“null”。后面所有应该在 else 子句中添加到 Seq 的三元组都不是。我还尝试了不同的方法,例如“++”,它们也不起作用(“参数太多”)

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

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

4

2 回答 2

4

首先,null最好不要使用 s ,而是使用空集合。下一次使用 :+= 所以 :+ 的结果不会被丢弃—— :+ 会生成一个新的集合作为结果,而不是修改现有的集合。最终代码看起来像

var all_info: Seq[(String, Int, Int)] = Seq.empty
all_info :+= (name, id, count)

如您所见,现在您不需要ifs 并且代码应该可以正常工作。

于 2013-06-04T14:35:20.703 回答
2

方法:+创建新的集合,并保持您的原始集合不变。

你应该使用方法+=+=如果编译器中没有方法all_infoall_info += (name, id, count)视为all_info = all_info + (name, id, count).

相反,如果您将类型更改all_info为某个可变集合,您将在其中获取方法+=,因此您的代码将按预期工作:+=可变集合上的方法更改目标集合。

:+=请注意,在mutable collections中没有方法,因此您all_info = all_info :+ (name, id, count)甚至可以使用 mutable collections。

于 2013-06-04T14:35:41.973 回答