使用Scala将列从textfile转换为set

时间:2016-08-24 21:14:59

标签: scala

我正在尝试将一个设置列从多个文件转换为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)

1 个答案:

答案 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