【发布时间】:2015-06-18 11:04:57
【问题描述】:
我有一个元素数组,它们有一个共同的属性并按此属性排序。现在,我想达到相反的效果:尽可能交错具有相同属性值的元素。
[
{a: 1},
{a: 1},
{a: 2},
{a: 2},
{a: 2},
{a: 3},
{a: 3},
{a: 3},
{a: 3},
].scatter_somehow
# =>
[
{a: 3},
{a: 1},
{a: 2},
{a: 3},
{a: 2},
{a: 1},
{a: 3},
{a: 2},
{a: 3},
]
如果a 的每个值都有相同数量的元素,我可以将它们分组,然后压缩数组并将结果展平。但是Array#zip 会在最小数组中没有元素时立即停止。
我该怎么做?
【问题讨论】:
-
您的问题不清楚。您的要求与
Array#shuffle有何不同? -
Shuffle 返回一个随机混合的数组。我希望元素尽可能分布。
-
@shock_one 不应该
{a: 1}在结果数组中的第一个和最后一个位置? -
@EugenePetrov:问得好。但这会使最初的
{a:3}s 彼此靠近。正确的方法是从定义必须最大化的“分布”度量开始。我知道基于 zip 的解决方案就足够了。