将 类 的列表折叠成单个逗号分隔的字符串(在 Scala 中)

folding a list of classes to a single, comma separated string (in Scala)

我需要获取大小写列表 类 并将它们转换为单个逗号分隔的字符串(没有标题或尾部逗号)。

case class State(name: String)

def toLine(states: State*): String = {
}

所以,toLine(State("one"), State("two"), State("three")) 应该return 一,二,三

这是我想到的。有什么更好的方法吗?

def toLine(states: State*): String = {
  states match {
    case s if s.isEmpty => throw new Exception
    case s => s.tail.foldLeft(s.head.name)(_+","+_) 
  }
}

有没有办法保证列表中至少有一个值?

Scala 的集合提供了一个函数来做到这一点:states.map(_.name).mkString(",")

如果你想确保 toLine 总是被至少一个值调用,你可以这样做:

def toLine(state: State, states: State*): String = {
  states.map(_.name).mkString(",")
}

这会将检查移至类型系统,而不是在运行时进行。

您可以使用 mkString:

def toLine(states: State*): String = states.map(_.name).mkString(",")

如果你需要保证至少一个元素你可以这样做:

def toLine(state: State, states: State*) = (state +: states).map(_.name).mkString(",")