Scala 如何制作地图的列对?
我有一些专栏,比如Scala 如何制作地图的列对?,scala,playframework-2.0,Scala,Playframework 2.0,我有一些专栏,比如 age | company | country | gender | ---------------------------------- 1 | 1 | 1 | 1 | ----------------------------------- 我想创建一对像 (年龄、公司) (公司、国家) (国家、性别) (公司、性别) (年龄、性别) (年龄、国家) (年龄、公司、国家) (公司、国家、性别) (年龄、国家、性别) (年龄、公司、性
age | company | country | gender |
----------------------------------
1 | 1 | 1 | 1 |
-----------------------------------
我想创建一对像
- (年龄、公司)
- (公司、国家)
- (国家、性别)
- (公司、性别)
- (年龄、性别)
- (年龄、国家)
- (年龄、公司、国家)
- (公司、国家、性别)
- (年龄、国家、性别)
- (年龄、公司、性别)
- (年龄、公司、国家、性别)
object PowerSetTest extends Application {
val ls = List(1, 2, 3, 4)
println(power(ls.toSet).filter(_.size > 1))
def power[A](t: Set[A]): Set[Set[A]] = {
@annotation.tailrec
def pwr(t: Set[A], ps: Set[Set[A]]): Set[Set[A]] =
if (t.isEmpty) ps
else pwr(t.tail, ps ++ (ps map (_ + t.head)))
pwr(t, Set(Set.empty[A]))
}
}
运行此命令将为您提供:
Set(Set(1, 3), Set(1, 2), Set(2, 3), Set(1, 2, 3, 4), Set(3, 4), Set(2, 4), Set(1, 2, 4), Set(1, 4), Set(1, 2, 3), Set(2, 3, 4), Set(1, 3, 4))
有关更多信息,请阅读使用
Set
收集方法子集生成功率集的惯用方法
implicit class groupCols[A](val cols: List[A]) extends AnyVal {
def grouping() = cols.toSet.subsets.filter { _.size > 1 }.toList
}
然后
交付
List( Set(age, company),
Set(age, country),
Set(age, gender),
Set(company, country),
Set(company, gender),
Set(country, gender),
Set(age, company, country),
Set(age, company, gender),
Set(age, country, gender),
Set(company, country, gender),
Set(age, company, country, gender))
请注意,powerset包括空集合和原始集合中每个元素的集合,在这里我们过滤掉它们。我想创建这些对,因为我还有一些其他的两列、三列和四列的表。我想创建这些对,并根据列对将这些对的值插入表中。在控制器中,以映射的形式。对于Set
,已经有一个subsets
方法,该方法在所有子集上返回一个Iterator
:List(1,2,3,4)。toSet.subsets.filter(\uu.size>1)。toSet
List( Set(age, company),
Set(age, country),
Set(age, gender),
Set(company, country),
Set(company, gender),
Set(country, gender),
Set(age, company, country),
Set(age, company, gender),
Set(age, country, gender),
Set(company, country, gender),
Set(age, company, country, gender))