gpt4 book ai didi

scala - 从 Scala 中的映射序列创建所有键的联合的功能方法

转载 作者:行者123 更新时间:2023-12-04 09:34:59 24 4
gpt4 key购买 nike

我有一个 map 序列

 Seq[Map[String,Int]] 

我想创建一个 Seq/Set,它是每个 Map 中所有键的联合。

unionallkeys = ( "a1", "a2", "a3", "b1", "b2", "b3", "c1", "c2", "c3" ) 

在下面的例子中。

scala> val a = Map( ("a1", 1), ("a2", 2), ("a3", 3) ) 
a: scala.collection.immutable.Map[String,Int] = Map(a1 -> 1, a2 -> 2, a3 -> 3)

scala> val b = Map( ("b1", 1), ("b2", 2), ("b3", 3) )
b: scala.collection.immutable.Map[String,Int] = Map(b1 -> 1, b2 -> 2, b3 -> 3)

scala> val c = Map( ("c1", 1), ("c2", 2), ("c3", 3) )
c: scala.collection.immutable.Map[String,Int] = Map(c1 -> 1, c2 -> 2, c3 -> 3)

scala> val misc = Map( ("a1", 1), ("b2", 2), ("c3", 3) )
misc: scala.collection.immutable.Map[String,Int] = Map(a1 -> 1, b2 -> 2, c3 -> 3)
^

scala> val rows = List(a,b,c,misc)
rows: List[scala.collection.immutable.Map[String,Int]] = List(Map(a1 -> 1, a2 -> 2, a3 -> 3), Map(b1 -> 1, b2 -> 2, b3 -> 3), Map(c1 -> 1, c2 -> 2, c3 -> 3), Map(a1 -> 1, b2 -> 2, c3 -> 3))

最佳答案

你可以把它写成一个相当清晰的单行代码:

scala> val keys: Set[String] = rows.flatMap(_.keySet).toSet
keys: Set[String] = Set(c3, b2, b3, c2, b1, c1, a3, a1, a2)

让我们一步一步地分解它。首先, map 上的 keySet 方法将为您提供一组 map 的键。如果你想要一组键的列表,你可以编写以下内容:

scala> val keySets: List[Set[String]] = rows.map(_.keySet)
keySets: List[Set[String]] = List(Set(a1, a2, a3), Set(b1, b2, b3), ...

然后您可以展平嵌套结构:

scala> val keyList: List[String] = keySets.flatten
keyList: List[String] = List(a1, a2, a3, b1, b2, b3, c1, c2, c3, a1, b2, c3)

请注意,结果具有外部集合的类型——即这是一个列表,而不是一个集合。您可以使用 toSet 将其转换为集合:

scala> val keys: Set[String] = keyList.toSet
keys: Set[String] = Set(c3, b2, b3, c2, b1, c1, a3, a1, a2)

你就完成了。上面的第一行只是一次完成所有这些步骤,并将 mapflatten 调用组合到一个 flatMap 中。

关于scala - 从 Scala 中的映射序列创建所有键的联合的功能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com