从两个集合中发现有效聚合,其中一个集合是另一个集合的集合

时间:2011-12-29 15:59:29

标签: algorithm scala aggregation

假设我有两种类型:

case class X(i: Int) 
case class Y(j: Int)

X代表Y s的某些聚合(但我已经丢失了关于哪个Y组成给定X的确切信息。我想计算一些有效的聚合:

def aggregate(xs: List[X], ys: List[Y]): Map[X, List[Y]] = {
  require(xs.nonEmpty)
  require(ys.nonEmpty)
  require(xs.count <= ys.count)
  require(xs.map(_.i).sum == ys.map(_.j).sum)

 lazy val result: List[X, List[Y]] = sys.error("todo: implement me!")

 assert(result forall { case (x, ys) => x.i == ys.map(_.j).sum })
 //assume an assertion that each input x and y appears exactly once in the result
 result

}

显然一般情况下这是不可能的;例如,这里可能没有有效的结果:

aggregate(List(X(1), X(3)), List(Y(2), Y(2))

但对于我的用例,我知道我的方法不能用不可聚合的值调用。


编辑我将添加对实际情况的解释。基本上我有两个交易来源,其中一个可以任意汇总。也就是说,从一个来源,我可能会看到2个交易的数量都是1,而从另一个来源我可能只看到一个数量为2的交易。我试图将交易来源编织在一起,以便结果Map说“这个2的总交易实际上由两个1的交易组成”

0 个答案:

没有答案
相关问题