将 类 的列表折叠成单个逗号分隔的字符串(在 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(",")
我需要获取大小写列表 类 并将它们转换为单个逗号分隔的字符串(没有标题或尾部逗号)。
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(",")