2012-11-17 26 views
2

我正在逐行讀取文件並放入列表中。 所以,如果我的文件有10行,我有10個列表。現在,在執行此操作時或之後,我想將所有列表添加到數組中。所以,我有一個列表數組,沒有使用「var」,所以基本上只是'val'。 這是我到目前爲止有:Scala:逐行讀取文件到列表數組

val fileLines = Source.fromFile(filename).getLines.toList 

    for (line <- fileLines) { 
    if (!line.isEmpty) 
    println((line.toList).filter(e => e != ' ')) 
    } 

我的每一行只是轉換成列表,並刪除空白元。 如何從這裏生成一個列表數組?數組類型爲val,不嘗試var。

+1

這很有趣!一些職位說..「它聞起來像功課,標記爲家庭作業」,並有這個職位upvoted 12次。現在,你說這個!嗯..反正,點了! – madCode

+0

你可能會改變/編輯問題。你說10行會做10個列表。我認爲你的意思是有10個物品的清單?巨大差距。 :/ – akauppi

回答

6

你可以嘗試這樣的事:

val myArray = fileLines.filterNot(_.isEmpty).map { line => 
    (line.toList).filter(e => e != ' ') 
}.toArray 

這將使你的列表元素的數組。如果您想要列表清單,您可以在最後刪除.toArray

+0

我明白了。但是,爲什麼在scala中打印數組,打印對象呢?我該如何去做...在列表數組中列舉..(n,n)個元素? – madCode

+1

在上面的例子中,如果使用println(myArray),它只會在對象上調用.toString並顯示輸出。要在列表中查找特定的內容,可以使用foreach迭代元素,或者使用類似List上的find(),collect()或filter()方法來獲取特定元素。結合zipWithIndex,你也可以訪問索引位置。對於一個數組,只需引用該位置,如:myArray(2) - 只要確保指定的位置處於邊界內即可。 – jcern

+0

但是,由於列表元素(例如,myArray(i))是'Any'類型,因此我無法對上述內容運行foreach。 – madCode