Scala Set 不同的操作

Scala Set different operations

这是我的代码片段:

 val check = collection.mutable.Set[String]()
    if (check.isEmpty) {
      println("There is no transfer data available yet, please use the 'load' command to initialize the application!")
    }
    val userSelection = scala.io.StdIn.readLine("Enter your command or type 'help' for more information:")
    val loadCommand = """^(?:load)\s+(.*)$""".r
    userSelection match {
        case loadCommand(fileName) => check add fileName ;print(check);val l= loadOperation(fileName);println(l.length); if (check.contains(fileName)){
          programSelector()

        }else{ loadOperation(fileName)}

所以首先我有一个匹配的输入,一种情况是 "load" 输入。 现在我的程序能够加载不同的 .csv 文件并将其存储到列表中。但是,我希望我的程序在加载新的 .csv 文件时检查它是否以前加载过。如果之前加载过,应该不会加载两次!! 所以我认为它可以使用 Set 检查,但它总是会覆盖我以前的文件名条目...

您的 set 操作没有问题。问题是 case loadCommand(fileName) 之后的 check add fileName 应该在 else 块中。 (我们不时拥有的那些 "d'oh" 时刻之一!?):)

更新

代码

val check = collection.mutable.Set[String]()
def process(userSelection: String): String = {
  val loadCommand = """^(?:load)\s+(.*)$""".r
  userSelection match {
    case loadCommand(fileName) =>
      if (check.contains(fileName))
        s"Already processed $fileName"
      else {
        check add fileName
        s"Process $fileName"
      }
    case _ =>
      "User selection not recognised"
  }
}

process("load 2013Q1.csv")
process("load 2013Q2.csv")
process("load 2013Q1.csv")

输出

res1: String = Process 2013Q1.csv
res2: String = Process 2013Q2.csv
res3: String = Already processed 2013Q1.csv