我有一个csv文件,其输出的行如下:
Distributed Systems|SOFE 4790U|M|14|10|17|0|University Building A1 UA2240
Research Methods|SSCI 2900U|F|14|10|17|0|61 Charles DTA219
Social Control|SSCI 2030U|R|14|10|17|0|61 Charles DTA219
是否总可以根据一列对csv文件中的值进行排序?例如说第3栏代表星期几。我将如何按照M T W R F对其进行排序?我一直在尝试使用案例类并覆盖equals / compare方法,但不确定从我已有的东西去哪里?
case class Foo(i: String)
{
override def equals()
}
val a = Foo("F")
val b = Foo("M")
println(a<b)
任何帮助都会很棒。
答案 0 :(得分:2)
您可以将其实现为字符串比较,但构建单独的DayOfWeek
类型的AST会更清洁。
sealed trait DayOfWeek extends Comparable[DayOfWeek] {
val value: Int
override def compareTo(o: DayOfWeek): Int = value compareTo o.value
}
object DayOfWeek {
case object M extends DayOfWeek { val value = 0 }
case object T extends DayOfWeek { val value = 1 }
case object W extends DayOfWeek { val value = 2 }
case object R extends DayOfWeek { val value = 3 }
case object F extends DayOfWeek { val value = 4 }
}
现在,我们不会看到<
运算符,但是幸运的是,Scala具有扩展方法的概念。
object DayOfWeek {
// ...
implicit class syntax(dow: DayOfWeek) {
def <(other: DayOfWeek): Boolean = (dow compareTo other) < 0
}
}
现在您可以像这样使用它
import DayOfWeek._
println(M < T)
// true
如果您想用字符串构造此类型,则可以尝试类似
object DayOfWeek {
// ...
// this method is unsafe, you might consider returning option instead, this is just for demonstartion purposes
def apply(s: String): DayOfWeek = s match {
case "M" => M
case "T" => T
case "W" => W
case "R" => R
case "F" => F
}
}
import DayOfWeek._
println(DayOfWeek("M") < DayOfWeek("T"))
// true