【发布时间】:2013-03-26 03:35:41
【问题描述】:
我有多个元素数未知的数组,例如
a = []
a << [:a, :c, :e]
a << [:b, :f, :g, :h, :i, :j]
a << [:d]
结果应该类似于 ~ (由于四舍五入等原因,我并不关心细节)
r = [:b, :a, :f, :g, :d, :c, :h, :i, :e, :j]
我认为可以这样做
首先,我们需要将每个数组中的 equally 元素扩展/分布到相同的长度,所以我们得到类似
a << [nil, :a, nil, :c, nil, :e]
a << [:b, :f, :g, :h, :i, :j]
a << [nil, nil, :d, nil, nil]
接下来我们像往常一样交错它们
r = a.shift
a.each { |e| r = r.zip(e) }
r = r.flatten.compact
我目前的问题是如何在数组中平均(尽可能多地)分布这些元素?一个数组可能有 4 个元素,另一个有 5 个元素,但可能最大的应该排在第一位。
当然很高兴看看是否有其他方法可以实现这一点:)
【问题讨论】:
-
你的问题真的没有意义。为什么是
[nil, :a, nil, :c, nil, :e]而不是[:a, :c, :e, nil, nil]? -
因为需要在扩展数组中平均分配元素(以便元素之间的空间几乎相等)而不仅仅是扩展数组。
标签: ruby arrays merge distribute