是否可以在Scala中对CSV文件中的值进行排序?

问题描述 投票:1回答:1

我有一个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)

任何帮助都会很棒。

string scala csv sorting
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.