如何将一个元组的Seq转换为单个元素Scala的集合

时间:2018-10-13 03:17:33

标签: scala tuples scala-collections

我们有一个元组序列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来说还算是陌生的,如果您能向我们指出正确的方向,那肯定会有更好,更有效的方法来实现这一目标

3 个答案:

答案 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来实现。