3

我有一个Seq元素Tuple3。我想要一个由每个元组的第二个元素组成的结果集合(可能是 a Set) 。

例如

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

任何的想法?我搜索了很多,但我发现的所有内容都与过滤元组有关,而不是在它们内部,如果这有任何意义的话。

我对 Scala 还是很陌生,学习是一个漫长的过程 :) 感谢您的帮助。

4

3 回答 3

6

根据您对所需内容的描述,这是 type 的某些功能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)
于 2012-05-15T12:43:22.517 回答
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)
于 2012-05-15T13:09:46.020 回答
3

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

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

于 2012-05-15T12:42:51.040 回答