[1,1,1,1,2,2,2,3,3,4] ["a","b","c","d"].pyr-6ren">
gpt4 book ai didi

ruby - "Pyramidizing"数组/列表(在 Ruby 中,但可能会实现通用解决方案)

转载 作者:数据小太阳 更新时间:2023-10-29 08:34:42 27 4
gpt4 key购买 nike

我不确定在这里用什么词最好。通过“金字塔化”,我的意思是:

[1,2,3,4].pyramidize  # => [1,1,1,1,2,2,2,3,3,4]
["a","b","c","d"].pyramidize # => ["a","a","a","a","b","b","b","c","c","d"]

从视觉上来说,可以认为是:

[ 1,1,1,1,
2,2,2,
3,3,
4 ]

有没有一种方法可以最大限度地提高优雅度?最像 ruby 的方式?

我在我的一个项目中遇到了这样做的“需要”。思前想后,我放弃了,决定用丑陋的方式解决这个问题。我想知道是否有一种漂亮的方法可以做到这一点。到目前为止,为了直接执行此操作,我最终为每个索引制作了一个单独的数组,并将每个数组拉伸(stretch)适当的长度并将它们组合在一起。但我不知道该怎么做,所以它看起来很漂亮;我的解决方案非常难看。

添加了代码 golf 标签,因为一行中的任何解决方案都可能让我开心,但这不是必须的。

如果您的解决方案是将第一个索引作为金字塔的“底”,还是最后一个索引,这并不重要,因为我可以在运行它之前反转数组。

最佳答案

需要 Ruby 1.9 中新的迭代器功能。

class Array
def pyramidize
reverse.map.with_index do |object, index|
[object] * (index + 1)
end.flatten.reverse
end
end

[1,2,3,4].pyramidize
=> [1, 1, 1, 1, 2, 2, 2, 3, 3, 4]
["a","b","c","d"].pyramidize
=> ["a", "a", "a", "a", "b", "b", "b", "c", "c", "d"]

关于ruby - "Pyramidizing"数组/列表(在 Ruby 中,但可能会实现通用解决方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3714000/

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