如何将元组的序列转换为单个元素的集合 Scala

How to convert a Seq of tuples into set's of individual elements Scala

我们有一个元组序列 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 还很陌生,我相信有更好、更有效的方法可以实现这一点,如果您能为我们指出正确的方向,那将有很大帮助

val result:(Set[String], Set[String]) = depTitleSeq.foldLeft((Set[String](), Set[String]())){(a, b) => (a._1 + b._1, a._2 + b._2) }

您可以使用 foldLeft 来实现。

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)

如果您想要将两个 Seq 数据组合成一个 Seq 元组,您可以 zip 将它们组合在一起。

如果您有 Seq 个元组并且您希望将元素分开,那么您可以 unzip 它们。

val (departmentSeq, titleSeq) = getDepTitleTupleSeq().unzip

val depSet   :Set[String] = departmentSeq.toSet
val titleSet :Set[String] = titleSeq.toSet