如果我有 2 个列表 ['a'; 'b'] 和 [1;2;3;4] 我想得到类似 [('a',2);('a',4);('b',3); ('b', 1)]。所以关键是我需要使用第二个列表的所有元素一次,我可以使用第一个元素中的元素 0 次或更多次......我尝试使用 List.combine 但总是将第一个列表的第 n 个元素与第 n 个元素连接起来第二个和列表也需要具有相同的长度...
答案 0 :(得分:0)
对第一组和第二组使用两个映射 (Map.Make(Int).t
)。然后使用元素位置作为键从列表中填充第一个映射(代表小组)。使用由 Random.bits ()
生成的随机密钥填充较大列表中的第二个映射。在发生冲突的情况下,即当生成的密钥已经在映射中时,生成一个新的密钥,直到生成一个新的密钥。
要生成输出列表,折叠第二个映射,然后使用 Random.int n
从第一个映射中选择元素,其中 n
是第一个映射的大小 (Map.cardinal
).
如果您热衷于使用 Base
,那么您可以考虑使用 Array.shuffle
来排列列表。