ruby – 构建有效的数组整数增量器,每个数字的上限不同
发布时间:2020-12-17 02:38:02 所属栏目:百科 来源:网络整理
导读:我想编制一个由数??字数组表示的计数器,从以下开始: [0,0] 这里的约束是,每个位置都有不同的上限,所以它不一定是9或其他东西,但它给出了.例如: [4,2,1] 这将导致以下增量序列: [0,0][0,1] [0,1,1][0,1][1,0]... 当然,我可以考虑使用模数的解决方案,并将每
我想编制一个由数??字数组表示的计数器,从以下开始:
[0,0] 这里的约束是,每个位置都有不同的上限,所以它不一定是9或其他东西,但它给出了.例如: [4,2,1] 这将导致以下增量序列: [0,0] [0,1] [0,1,1] [0,1] [1,0] . . . 当然,我可以考虑使用模数的解决方案,并将每个结转添加到下一个位置.但有人知道如何有效地实现这一点,分别使用漂亮的Ruby语法而不会过多地混淆它? 这是我天真的实施: max = [10,10] counter = [0,0] i = counter.length-1 while counter != max do counter[i] = counter[i] + 1 while counter[i] > max[i] counter[i] = 0 i = i - 1 counter[i] = counter[i] + 1 end i = counter.length-1 end 解决方法
为每个上限创建一个数组,其值从0到上限.获取第一个数组并使用其余数组计算笛卡尔积.
caps = [4,1] arrs = caps.map{|cap| (0..cap).to_a} #=>[[0,3,4],[0,2],1]] p arrs.shift.product(*arrs) # =>[[0,0],1],... 如果您不想要一个包含结果的内存消耗数组,那么提供一个块.产品将逐一产生每个元素. arrs = caps.map{|cap| (0..cap).to_a} arrs.shift.product(*arrs){|el| puts el.join} #no resulting array #000 #001 #010 #011 #... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |