我们有一个元组序列Seq(department, title
depTitleSeq
,我们想提取Set(department)
和Set(title)
,以寻找迄今为止最好的方法是
val depTitleSeq = getDepTitleTupleSeq()
var departmentSeq = ArrayBuffer[String]()
var titleSeq = ArrayBuffer[String]()
for (depTitle <- depTitleSeq) yield {
departmentSeq += depTitle._1
titleSeq += depTitle._2
}
val depSet = departmentSeq.toSet
val titleSet = titleSeq.toSet
对于Scala来说还算是陌生的,如果您能向我们指出正确的方向,那肯定会有更好,更有效的方法来实现这一目标
答案 0 :(得分:4)
如果您要将两个Seq
个数据合并为一个Seq
个元组,则可以将它们zip
合并在一起。
如果您有Seq
个元组并且想要分隔元素,则可以unzip
个元素。
val (departmentSeq, titleSeq) = getDepTitleTupleSeq().unzip
val depSet :Set[String] = departmentSeq.toSet
val titleSet :Set[String] = titleSeq.toSet
答案 1 :(得分:1)
val depTitleSeq = Seq(("x","a"),("y","b"))
val depSet = depTitleSeq.map(_._1).toSet
val titleSet = depTitleSeq.map(_._2).toSet
在Scala REPL中:
scala> val depTitleSeq = Seq(("x","a"),("y","b"))
depTitleSeq: Seq[(String, String)] = List((x,a), (y,b))
scala> val depSet = depTitleSeq.map(_._1).toSet
depSet: scala.collection.immutable.Set[String] = Set(x, y)
scala> val titleSet = depTitleSeq.map(_._2).toSet
titleSet: scala.collection.immutable.Set[String] = Set(a, b)
答案 2 :(得分:0)
val result:(Set[String], Set[String]) = depTitleSeq.foldLeft((Set[String](), Set[String]())){(a, b) => (a._1 + b._1, a._2 + b._2) }
您可以使用foldLeft
来实现。