给定一个列表列表(假设有 5 个列表,以便有一个可以使用的实数),我可以相对轻松地找到所有 5 个列表所共有的项目(请参阅使用 IEnumerable.Intersect() 求多个列表的交集 https://stackoverflow.com/questions/1674742/intersection-of-multiple-lists-with-ienumerable-intersect)使用以下代码的变体:
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 列表所共有的项目,等等。从视觉上看,这可以用网格点列表来表示,我们正在搜索具有最多网格点的点。重叠。
有任何想法吗?
编辑:
也许最好查看每个点并跟踪它在每个列表中出现的次数,然后创建出现次数最多的点的列表?