gpt4 book ai didi

ruby - Ruby 中数组上的 Each_Slice

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:55 24 4
gpt4 key购买 nike

我希望获得一个嵌套数组,其中包含最少包含三个元素但最多包含四个元素的单个数组。当我到达 10 时,我遇到了一个问题:

example = [1,2,3,4,5,6,7,8,9,10]

example.each_slice(3).to_a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
example.each_slice(4).to_a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]

期望的结果是:

[[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]       (all arrays have 3 elements but no more than 4)

each_slice 不是执行此操作的方法吗?

谢谢

最佳答案

each_slice 生成所需大小的切片;它不会直接完成你在这里想要的东西,这是列表的一种“平衡”。幸运的是,我们可以到达那里。

list = (1..10).to_a
slice_count = (list.length / 3.0).floor
list.each_slice(slice_count).to_a.each {|l| l.fill nil, slice_count, 0 }.transpose.map(&:compact)
# => [[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]]

这不会保留顺序,但会平衡值。它的工作方式是,它基本上创建了一个值矩阵,其中至少填充了每列的前 3 行,第四列用于捕获溢出。

1  2  3
4 5 6
7 8 9
10 - -

然后使用#transpose 从列中创建数组,然后我们将其压缩以删除 nils。

保持顺序有点困难,需要一些 if 条件。在这种情况下,具有 3/4 元素的数组的期望分布将影响答案。

关于ruby - Ruby 中数组上的 Each_Slice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26246713/

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