2016-08-24 36 views
0

我試圖將多個文件中的一個集合列轉換爲Set。我得到的結果,但它似乎代碼認爲每個文件的整個列作爲一個集合元素,因此不會刪除任何重複。使用Scala將文本文件的列轉換爲集合

我想我無法從一個文件轉換或向量化單個元素,因此它將該列分組爲單個元素。

import scala.io.Source 


if (args.length > 0){ 

var ids : Set[String] = collection.immutable.HashSet() 
    for (arg<-args){ 
ids += Source.fromFile(arg).getLines().filterNot(_.trim.startsWith("#")).map(_.split("\t")(0)).mkString("\n") 
} 
println(ids) 
} 

else 
Console.err.println("Please enter filename") 

輸入文件

**文件:

#df 
ABC 2 
ABC 7 
CVF 9 

**文件B:

#dsdff 
# 
# 
ABC 1 
DFG 2 
CVF 3 

我得到的是這種輸出

Set(ABC 
DFG 
CVF, ABC 
ABC 
CVF) 

所需的輸出:

Set(ABC,DFG,CVF) 

回答

3

取出mkstring操作被稱爲上的每個文件的內容,並更改ids +=ids ++=(因爲你要添加的集合)。

或者你可以清理這樣一個位:

val ids: Set[String] = 
    args.flatMap { arg => 
    Source.fromFile(arg).getLines() 
     .filterNot(_.trim.startsWith("#")) 
     .map(_.split("\t").head) 
    }.toSet 

或像這樣:

val ids: Set[String] = 
    (for { 
    arg <- args 
    line <- Source.fromFile(arg).getLines() 
    if !line.trim.startsWith("#") 
    } yield line.split("\t").head).toSet