gpt4 book ai didi

arrays - 如何分散 Ruby 数组的元素?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:22:47 25 4
gpt4 key购买 nike

我有一个元素数组,它们有一个共同的属性,并按这个属性排序。现在,我想达到相反的效果:尽可能地交错具有相同属性值的元素。

[
{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 在最小数组中没有元素时立即停止。

我该怎么做?

最佳答案

所以你最初的方法是这样的

x.group_by { | e | e[:a] }.values.inject(&:zip).flatten

如果一个组的元素少于之前的组,则失败。

想法是如果第一个数组太短就切换它们(之后用 compact 删除 nil):

x.group_by { | e | e[:a] }.values.inject do | a, e |
if a.length < e.length
e.zip(a)
else
a.zip(e)
end
end.flatten.compact

关于arrays - 如何分散 Ruby 数组的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com