【发布时间】:2025-07-29 23:25:22
【问题描述】:
与此类似的问题:Combination of List<List<int>>
但是,改组使这变得不简单,IMO 需要一个完全不同的解决方案。我很高兴被证明是错误的,但这并不像改组结果那么容易,因为结果列表无法放入内存:
我需要合并 3 个 LARGE 列表:
List<int> A = new List<int> {1, 2, 3, ...};
List<int> B = new List<int> {4, 5, 6, ...};
List<int> C = new List<int> {7, 8, 9, ...};
输出是一个新的List<object> { {1, 4, 7}, {1, 4, 8}, ... }
但是,我需要对结果列表进行洗牌。如果每个单独的列表在组合时仍然被模式化,那么洗牌是不够的,虽然 3 个列表可以放入内存,但所有 3 个列表的组合将不适合。洗牌后的索引列表显然也太大而无法存储在内存中。
我尝试了许多不同的方法,但如果不先加载每个项目,我就找不到一种方法来随机化订单。这可能吗?谢谢!
【问题讨论】:
-
object是什么类型? -
@TimSchmelter 本质上是一个包含所有 3 个整数的结构
-
您需要从每个列表中取出所有数字而不重复,还是仅总数为
A.Count+B.Count+C.Count并允许重复? -
@TimSchmelter 总数应为
A.Count*B.Count*C.Count。我一直在通过忽略重复来解决这个问题,然后检查处理端是否已经测试过某些东西。这工作正常,但也意味着我不知道我何时完成了所有可能的组合并且这样做时没有任何进展 - 基本上是一个长时间运行的无限循环。 -
好吧,只要您有空闲的预处理时间,将包含
ints0 .. A.Count * B.Count * C.Count - 1的文件存储到磁盘,然后对其执行Fisher-Yates shuffle。它非常慢(大量随机磁盘访问),但没有捷径可以正确洗牌。
标签: c# linq list generics combinations