【发布时间】:2018-11-01 02:23:51
【问题描述】:
遇到了麻烦...我什至不知道从哪里开始。
我有一个未排序的对象列表:
myList = (A, Z, T, J, D, L, W...)
这些对象有不同的类型,但都共享相同的父类型。
一些对象通过自定义业务逻辑相互“匹配”:
A.matches(B) = True
A.matches(C) = False
(编辑:匹配是可交换的。X.matches(Y) = Y.matches(X))
我正在 Scala 中寻找一种方法来对匹配的对象进行分组,所以我最终得到了类似的结果:
myMatches = [ [A,B,C], [D,Z,X], [H], ...]
这里有一个问题——匹配不是传递的。
A.matches(B) = True
B.matches(C) = True
A.matches(C) = False <---- A and C can only be associated through their matches to B
我仍然希望 [A,B,C] 被分组,即使 A 和 C 不直接匹配。
有没有一种简单的方法可以将所有相互匹配的东西组合在一起?是否有此类问题的名称,以便我可以 Google 更多有关它的信息?
【问题讨论】:
-
这是一个奇怪的要求。我认为您需要构造一个传递函数来替换
matches(例如matches2),该函数封装了使这些对象属于同一组的原因,因此如果A matches2 B和B matches2 C,则A matches2 C紧随其后。此外,为了保持一致,一组中的任何东西都必须与其他组匹配失败。即使将元素与现有组的成员与您当前的matches进行比较也会失败(如果在B出现之前比较它们,A和C可能最终会出现在不同的组中)。