gpt4 book ai didi

arrays - Ruby-将数组拆分为非常长的子数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:21 26 4
gpt4 key购买 nike

这是我的问题:

我有一个大数组,我想拆分成一个数组数组。这些子数组的长度必须由第二个数组给定。

例子

x=[*1..10]

y=[1,4,2,3]

我正在寻找 output=[[1],[2,3,4,5],[6,7],[8,9,10]]

是否有 ruby​​istic 技巧可以做到这一点?

感谢您的帮助:)

最佳答案

您可以尝试 shift,它会为您提供数组中的第一个元素,然后将其从开头移除。

a = [1,2,3,4]
a.shift
# 1
a
# [2,3,4]

它还需要一个参数来表示从数组中移出的数量。

a = [1,2,3,4]
a.shift(2)
# [1,2]
a
# [3,4]

所以对于你的数组...

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

z = y.map do |length|
x.shift(length)
end

z
# [[1], [2, 3, 4, 5], [6, 7], [8, 9, 10]]
    带参数的
  • shift 将返回一个数组,其中包含从数组开头取出的元素。与此相反的是 pop,其工作方式相同,但从数组末尾获取元素。
  • map 将遍历数组,就像 each 一样,但将每次迭代的结果放入一个新数组中。
  • 因此遍历您的长度数组,我们将从数组中获取前几个。

附录:一些评论者表示担心此方法会改变初始变量。 (在这个过程之后,x 将是一个空数组,因为它已经全部移出)。

如果拆分后需要再次使用 x,可以使用 dup 来保留完整的副本。

x2 = x.dup
x2
# [1,2,3,4,5,6,7,8,9,10]

z = y.map do |length|
x2.shift(length)
end

x
# [1,2,3,4,5,6,7,8,9,10]
x2
# []

关于arrays - Ruby-将数组拆分为非常长的子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49404722/

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