2016-02-20 49 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