首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Scala中生成每个映射组合

如何在Scala中生成每个映射组合
EN

Stack Overflow用户
提问于 2022-05-17 18:20:13
回答 1查看 50关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
复制
   val monies: Map[String, Double] = Map(
    "USD-EUR" -> 0.7473154,
    "EUR-GBP" -> 0.0097373,
    "GBP-USD" -> 136.6080875,
    "COL-USD" -> 1.0000000,
    "ABC-XYZ" -> 1.00034500,
    "XYZ-ABC" -> 1.000345000
  )

我想要创建一个List[Map[String, Double]],它包含上面地图的所有可能组合。

在地图的最终列表中,每个地图必须至少有三种货币(即,任何小于3个条目的地图必须排除在外)。

提供的地图可能有3种货币,也可能有50种。这意味着解决方案必须是可扩展的,例如,如果任何新国家与新货币一起建立的话。

代码语言:javascript
代码运行次数:0
运行
复制
  List(
    Map(
      "USD-EUR" -> 0.7473154,
      "EUR-GBP" -> 0.0097373,
      "GBP-USD" -> 136.6080875
    ),
    Map(
      "EUR-GBP" -> 0.0097373,
      "USD-EUR" -> 0.7473154,
      "GBP-USD" -> 136.6080875
    ),
    Map(
      "EUR-GBP" -> 0.0097373,
      "GBP-USD" -> 136.6080875,
      "USD-EUR" -> 0.7473154
    ), 
    Map(
      "USD-EUR" -> 0.7473154,
      "EUR-GBP" -> 0.0097373,
      "GBP-USD" -> 136.6080875,
      "COL-USD" -> 1.0000000,
    ),
    Map(
      "EUR-GBP" -> 0.0097373,
      "USD-EUR" -> 0.7473154,
      "GBP-USD" -> 136.6080875,
      "COL-USD" -> 1.0000000,
    ), 
    
    .... etc etc

  )

请注意,唯一可能意味着不同的顺序的条目。地图大小的长度也不同。键必须指向原始值。

EN

回答 1

Stack Overflow用户

发布于 2022-05-17 18:29:41

你所需要的似乎是:

代码语言:javascript
代码运行次数:0
运行
复制
def getSubMaps[K, V](map: Map[K, V]): Iterator[Map[K, V]] =
  map
    .keySet
    .subsets
    .filter(keys => keys.sizeIs >= 3)
    .map(keys => keys.map(key => key -> map(key)).toMap)

由于结果可能太大,所以最好返回一个Iterator,它将惰性地生成所需的值。如果您确实需要内存中的所有toList,则始终可以在结束时调用它们。

正如我常说的,是你的朋友。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72278924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档