我想知道当我想做一些特定于元素的事情时,将元素数组转换为字符串的最佳方法是什么。例如说我有
case class A(x: Int, y: Int)
val list = List(A(2, 3), A(4, 2), A(5, 1))
现在假设我想将其转换为仅包含 x 值的逗号分隔列表。即“2、4、2”。有没有办法用 mkString 来实现这一点?
一个相关的问题是如何处理列表中的列表。所以说我们有:
case class A(x: Int, y: Int, bs: List(B))
case class B(z: Int)
以及以下列表:
val list = List(A(2, 3, List(B(4), B(2))), A(4, 2, List()), A(5, 1, List(B(3))))
我想将 A 的部分与 B 中的第一个元素结合起来输出,以产生类似:“2:4、”4:”、“5:3”的内容。
有没有办法用 mkString 来实现这一点,还是我找错了树?
谢谢 设计说明
最佳答案
当然,你可以先映射,然后制作字符串:
val remapped = myList map {
case A(x, y) => "%s:%s" format (x, y)
}
remapped mkString (",")
这会产生“1:2, 2:5”格式。如果您只想用逗号分隔,那么您可以 flatMap:
val remapped = myList flatMap{
case A(x, y) => List(x, y)
}
remapped mkString (",")
这会给你“1,2,2,5”。
你能直接用mkString
来做到这一点吗?不,我不这么认为,除非您像这样覆盖 A
的 toString
方法:
case class A(x: Int, y: Int){
override def toString() = "%s:%s" format (x, y)
}
对于嵌套列表
您必须在取消申请
方面发挥更多创意:
myList map {
case A(x, _, head :: _) => "%s:%s" format (x, head.z)
case A(x, _, Nil) => x toString ()
}
其中您要提取 B
嵌套列表的第一项。
关于scala 在操作元素时调用 mkString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977229/