2015-07-03 43 views
-1

我今天發佈了一些問題在stackoverflow,但我處理的問題需要比預期更復雜的代碼。如何把一個任意的大元組與模式匹配的情況下?

我有這樣的代碼:

val nsc1= Stream.iterate((1,0,1,1))({case (a,b,c,d) => (b,c,d,b+c)}) map (c=> c._1) 

這裏流的初始值是Tuple4,但我需要管理它的一個任意大小。 這個問題實際上不是最初的參數,而是元組中的值列表。你知道一個方法來實現它嗎?

我也會在'模式匹配'上在網上搜索,並在這裏找到答案,如果我找到它。

感謝您的任何幫助!

奧利維爾

+3

列表而不是元組怎麼樣? – ZhekaKozlov

+0

是的,你們都是對的,我意識到正確的方法是使用陣列。但無論如何,我喜歡給出可用於元組的方法的答案。謝謝 – lolveley

回答

0

你可以有任意長度匹配List。不知道你正在嘗試做的,但這裏是做到這一點的一種方法:

Stream.iterate(List(1,0,1,1)){ 
    case List(a,b,c,d) => List(b,c,d,b+c) 
    case List(a,b,c) => List(a) 
    case List(a,b) => List(a) 
    case List(a) => List(a) 
} map(_(0)) 
1

參與工作的List或一些其他類型的集合肯定會更容易,但如果你真的被卡住的元組各種長度然後我認爲你將不得不放棄模式匹配。

相反,你可能需要通過元組t =>然後用t.productArityt.productElement(),和/或t.productIterator檢查的元組,並建立相同的配置文件返回元組。