使用每个元组的一个元素过滤Tuple3的Seq

时间:2012-05-15 12:37:45

标签: scala tuples seq

我有SeqTuple3元素。 我想要一个由每个元组的 second 元素组成的结果集合(可能是Set)。

例如

(a, b, c), (d, e, f), (g, h, i) ==> (b, e, h)

有什么想法吗?我搜索了很多但是我发现的所有内容都与对元组进行过滤有关,而不是在其中,如果这有意义的话。

我还是Scala的新手,学习是一个漫长的过程:)感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

根据您对所需内容的描述,即Seq[(A, B, C)] => Set[B]类型的某些功能,您需要映射,而不是过滤。例如,

scala> Seq(('a', "foo", 1), ('b', "bar", 2)).map(_._2).toSet
res0: scala.collection.immutable.Set[java.lang.String] = Set(foo, bar)

答案 1 :(得分:4)

如果您不喜欢笨拙的元组访问器(_1,_2等),可以使用模式匹配的“部分函数文字”:

scala> Seq(('a', "foo", 1), ('b', "bar", 2)) map { case (_, x, _) => x } toSet
res1: scala.collection.immutable.Set[java.lang.String] = Set(foo, bar)

答案 2 :(得分:3)

yourSeqOfTuples.map(tuple => tuple._2).toSet,可以缩短为yourSeqOfTuples.map(_._2).toSet

如果您愿意,可以使用{}而不是()。 _2是获取元组的第二个元素的方法。