给定一个列表列表(比如说 5个列表,有一个可以使用的实数),我可以使用以下代码的变体:
var list1 = new List<int>() { 1, 2, 3 };
var list2 = new List<int>() { 2, 3, 4 };
var list3 = new List<int>() { 3, 4, 5 };
var listOfLists = new List<List<int>>() { list1, list2, list3 };
var intersection = listOfLists.Aggregate((previousList, nextList) => previousList.Intersect(nextList).ToList());
现在假设intersection
最终包含 0 个项目。很可能有一些对象是 4/5 列表共有的。我将如何以最有效的方式找到它们?
我知道我可以遍历 4 个列表的所有组合并保存所有结果,但是该方法不能很好地扩展(最终必须在大约 40 个列表上完成)。
如果 4 个列表没有共同的项目,则将重复搜索以寻找 3/5 列表共同的项目等。在视觉上,这可以由网格点列表表示,我们正在搜索具有最多的点重叠。
有任何想法吗?
编辑:也许最好查看每个点并跟踪它在每个列表中出现的次数,然后创建一个出现次数最多的点列表?