scala - 在 Scala 中获取一系列大小的子集?
问题描述
我可以获得特定大小的子集或所有子集。
scala> println((1 to 25).toSet.subsets.size)
33554432
scala> println((1 to 25).toSet.subsets(1).size)
25
scala> println((1 to 25).toSet.subsets(10).size)
1
要获得大小的子集,比如 10 或更少,我可以退回到循环并采用联合。这样做的函数式编程方式是什么?
解决方案
您可以flatMap
按如下方式使用:
(1 to 10).flatMap((1 to 25).toSet.subsets(_))
例如,下面是6 个元素subsets
中大小不超过 3的所有元素的列表Set
:
(1 to 3).flatMap((1 to 6).toSet.subsets(_))
// res1: scala.collection.immutable.IndexedSeq[scala.collection.immutable.Set[Int]] = Vector(
// Set(5), Set(1), Set(6), Set(2), Set(3), Set(4),
// Set(5, 1), Set(5, 6), Set(5, 2), Set(5, 3), Set(5, 4), Set(1, 6),
// Set(1, 2), Set(1, 3), Set(1, 4), Set(6, 2), Set(6, 3), Set(6, 4),
// Set(2, 3), Set(2, 4), Set(3, 4),
// Set(5, 1, 6), Set(5, 1, 2), Set(5, 1, 3), Set(5, 1, 4), Set(5, 6, 2),
// Set(5, 6, 3), Set(5, 6, 4), Set(5, 2, 3), Set(5, 2, 4), Set(5, 3, 4),
// Set(1, 6, 2), Set(1, 6, 3), Set(1, 6, 4), Set(1, 2, 3), Set(1, 2, 4),
// Set(1, 3, 4), Set(6, 2, 3), Set(6, 2, 4), Set(6, 3, 4), Set(2, 3, 4)
// )
推荐阅读
- javascript - 过滤输入选择结合firestore
- ruby-on-rails - 如何在 Rails 4 中过滤索引以获取真值
- jenkins - 从 curl 发送 XML 结果的最佳方式
- node.js - 将node.js配置文件放在s3而不是同一服务器的最佳实践是什么
- arrays - 如何在 Ocaml 中打印一个单位?[初学者]
- android - android gradle 插件中的错误:它必须依赖于 com.google.firebase:firebase-core 才能使 firebase 服务按预期工作
- c - 如何指示可以使用内联 ASM 参数*指向*的内存?
- spring-boot - 建议不适用于单元测试
- java - WildFly App Dev:如何在开发时反映运行时类路径?
- scala - 为什么在 val 变量上使用 += 和 a=x+y 会出现不同的错误消息?