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
这是我的代码片段:
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