我有Seq
个Tuple3
元素。
我想要一个由每个元组的 second 元素组成的结果集合(可能是Set
)。
例如
(a, b, c), (d, e, f), (g, h, i) ==> (b, e, h)
有什么想法吗?我搜索了很多但是我发现的所有内容都与对元组进行过滤有关,而不是在其中,如果这有意义的话。
我还是Scala的新手,学习是一个漫长的过程:)感谢您的帮助。
答案 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
是获取元组的第二个元素的方法。