【发布时间】:2025-12-09 12:45:02
【问题描述】:
我有一个带有列标题的 csv。一列标题是“日期”。如果我想生成两个 CSV,分为 DATE 之前和 DATE 之后/包括 DATE,有没有办法在没有程序循环的情况下做到这一点?我注意到大多数列表函数都适合按行过滤。
【问题讨论】:
我有一个带有列标题的 csv。一列标题是“日期”。如果我想生成两个 CSV,分为 DATE 之前和 DATE 之后/包括 DATE,有没有办法在没有程序循环的情况下做到这一点?我注意到大多数列表函数都适合按行过滤。
【问题讨论】:
我假设您已经将数据解析为如下内容:
val myDoc = List(
List("ID", "NAME", "DATE", "DESC"),
List("1", "a", "1990", "x"),
List("2", "b", "1991", "y")
)
现在我们可以使用splitAt 和unzip 将列表分开。请注意,我对数据做了很多假设——在实际代码中,我们想要检查列表是否为非空,并且标题实际上包含 "DATE" 列。
def split(doc: Seq[Seq[String]]) = {
val i = doc.head.indexOf("DATE")
doc.map(_.splitAt(i)).unzip
}
我们可以将它应用到我们的测试数据中:
scala> val (b, a) = split(myDoc)
b: List[Seq[String]] = List(List(ID, NAME), List(1, a), List(2, b))
a: List[Seq[String]] = List(List(DATE, DESC), List(1990, x), List(1991, y))
我觉得这很合理。
【讨论】: