2014-11-23 11 views
0

我試圖根據結果創建一個翔實的報告。 我目前有一個.foreach循環迭代列表,並寫入報告。斯卡拉字符串 - 如何更改行

代碼如下:

result.foreach { 
    tupleResult => 
     tupleResult._3 match { 
     case "FirstTest" => 
      language1 = createReport(tupleResult) 
     case "SecondTest" => 
      language2 = createReport(tupleResult) 
     case "ThirdTest" => 
      language3 = createReport(tupleResult) 
     } 
     finalReport = "" 
    } 

每個「CREATEREPORT」是創建一個線串到相關語言變種的方法。 我希望每次迭代都在「finalReport」字符串中添加不同的行。

「finalReport」的實例:

Report consists of the following: 
1) language1 
2) language2 
3) language3 

的問題是如何以創建不同的變量爲不同的線條相同的「finalReport」字符串。

+1

你的問題不是很清楚。你想要的東西是:'finalReport + = createReport(...)+「\ n」'? – pedrofurla 2014-11-23 20:08:55

+0

這似乎是你理解我的意思。我想要一個有序列表,其中每個語言變量都以新行添加到前者中。是正確的方式是這樣的:finalReport = language +「\ n」? – user3370773 2014-11-23 20:12:14

+0

如果您想覆蓋finalReport中的內容。 – pedrofurla 2014-11-23 20:14:24

回答

2

更習慣scala的方式來做它會一次不做幾件事情,也改變狀態,而是把它看作單獨的操作/表達式。事情是這樣的,例如:

val sortedResults = result.sortBy(_._3 match { 
    case "FirstTest" => 1 
    case "SecondTest" => 2 
    case "ThirdTest" => 3 
}) 

val reportLines = sortedResults.map(result => createReport(result._3)) 

val finalReport = reportLines.mkString("\n") 
1

關聯的順序來測試字符串可以證明的解決方案,比如像這樣,

val ord = Array("FirstTest","SecondTest","ThirdTest").zipWithIndex.toMap 

然後我們就可以生成報告的部分,最後排序他們通過定義的順序,

val finalReport = result.map { tRes => (ord.get(tRes._3), createReport(tRes)) } 
    .sortBy(_._1) 
    .map(_._2) 
    .mkString("\n")