Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何制作地图的列对?_Scala_Playframework 2.0 - Fatal编程技术网

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))