这是问题的要点:给定一个集合列表,例如:
[ (1,2,3), (5,2,6), (7,8,9), (6,12,13), (21,8,34), (19,20) ]
返回集合的组列表,以便具有共享元素的集合在同一组中。
[ [ (1,2,3), (5,2,6), (6,12,13) ], [ (7,8,9), (21,8,34) ], [ (19,20) ] ]
请注意粘性 - 集合 (6,12,13) 与 (1,2,3) 没有共享元素,但由于 (5,2,6),它们被放在同一个组中。
更复杂的是,我应该提一下,我并没有真正拥有这些整洁的集合,而是一个包含数百万行的 DB 表,如下所示:
element | set_id
----------------
1 | 1
2 | 1
3 | 1
5 | 2
2 | 2
6 | 2
等等。所以我很想用 SQL 来做这件事,但我会对解决方案的总体方向感到满意。
编辑:将表列名称更改为 (element, set_id) 而不是 (key, group_id),以使术语更加一致。请注意,Kev 的答案使用旧的列名。