2013-06-04 19 views
1

我想有一个结果序与三重(字符串,INT,INT)是这样的:为什么:+追加到Seq没有效果?

var all_info: Seq[(String, Int, Int)] = null 

现在,我尝试将元素添加到我的序列如下:

if (all_info == null) { 
    all_info = Seq((name, id, count)) 
    } else { 
    all_info :+ (name, id, count) 
    } 

和打印出来

Console.println(all_info.mkString) 

不幸的是,打印结果仅仅是第一三倍由if子句添加和基本intializes一个新的序列,因为它已经不仅仅是“空” b安伏。 所有后面的三元组应该被添加到else子句中的Seq中。 我也尝试过不同的方法,如“++”,它也不会工作(“太多的参数”)

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

感谢您提前提供任何帮助! 问候。

回答

4

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

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

正如你所看到的,现在你不需要if S和代码应该很好地工作。

+0

奇怪的是,在库中它是::+ =这个序列的一个副本附加了一个元素。所以我认为它只是将新的三元组追加到现有的结果中,甚至没有“:+ =”。无论如何,代码工作正常,我了解到一个新的运营商,感谢您的帮助! :) – AvantiC

2

方法:+创建新集合并保留原始集合不变。

您应该使用方法+=。如果all_info中没有方法+=,则编译器会将all_info += (name, id, count)视为all_info = all_info + (name, id, count)

相反,如果你会改变的all_info类型的一些可变集合,你会得到它的方法+=,所以按照预期的代码将工作:对可变集合方法+=改变目标集合。

请注意,mutable collections中没有方法:+=,所以即使对于可变集合,也会得到all_info = all_info :+ (name, id, count)

+0

我明白了,谢谢你的帮助! :) – AvantiC

相关问题