2016-02-20 50 views
2

由昏迷,看起来像这个我的元组分开:修改的(字符串,字符串)变量的位置在斯卡拉

("TRN_KEY", "88.330000;1;2")

我想一些更多的信息添加到第二位置。

例如:

我想补充;99;9988.330000;1;2这样在最后它会是什么样子:

(TRN_KEY, 88.330000;1;2;99;99)

+0

感谢您的回答!它效果很好!虽然现在我还有一个问题,如果这个元组从列表中出来,可以这样说:List((TRN2,88.330000; 1; 2),(PAY,1; 3; 4))怎么可能我修改此列表的第一个位置? – Ewik

回答

1

的一种方法是去谱写你的元组和CONCAT第二个元素的附加字符串:

object MyObject { 
    val (first, second) = ("TRN_KEY","88.330000;1;2") 
    (first, second + ";3;4")) 
} 

其中收益率:

res0: (String, String) = (TRN_KEY,88.330000;1;2;3;4) 

另一种方法是使用Tuple2.copy将新值复制到元组,因为元组是不可变的。

+0

你应该使用'+'而不是'+ =' –

+0

@Lukasz - 谢谢。 –

1

由于Tuple2是不可变的,所以不能修改数据。 一个选项将会有一个var,然后使用copy方法。

在斯卡拉由于structural sharing这是一个相当便宜和快速的操作。

scala> var tup = ("TRN_KEY","88.330000;1;2") 
tup: (String, String) = (TRN_KEY,88.330000;1;2) 

scala> tup = tup.copy(_2 = tup._2 + "data") 
tup: (String, String) = (TRN_KEY,88.330000;1;2data) 
+0

感谢您的回答!它效果很好!虽然现在我还有一个问题,如果这个元组从列表中出来,可以这样说:List((TRN2,88.330000; 1; 2),(PAY,1; 3; 4))怎么可能我修改此列表的第一个位置? – Ewik

+0

''var var myList = ...; myList = modify(myList.head):: myList.tail''' –

1

这是一个简单的功能,可以完成工作。它需要一个元组并将一个字符串追加到元组的第二个元素。

def appendTup(tup:(String, String))(append:String):(String,String) = { 
    (tup._1, tup._2 + append) 
} 

下面是使用它

val tup = ("TRN_KEY", "88.330000;1;2") 
val tup2 = appendTup(tup)(";99;99") 

println(tup2) 

这里是一些代码是我的输出

(TRN_KEY,88.330000;1;2;99;99) 
0

如果你真的想让它可变的,你可以使用的情况下,类如:

case class newTup(col1: String, var col2: String) 

val rec1 = newTup("TRN_KEY", "88.330000;1;2") 

rec1.col2 = rec1.col2 + ";99;99" 

rec1 
res3: newTup = newTup(TRN_KEY,88.330000;1;2;99;99) 

但是,如果使用以上版本,则最好使用.copy