我正在尝试将一个设置列从多个文件转换为Set。我得到了结果,但似乎这段代码将每个文件中的整列视为一个集合元素,因此不会删除任何重复项。
我认为我无法从一个文件转换或向量化单个元素,因此它将列分组为单个元素。
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")
输入文件
**文件a:
#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)
答案 0 :(得分: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