Rails中如何按指定数量提取数组元素拆分存入多个新数组
Ruby按固定长度拆分数组实现方案
你可以直接用Ruby内置方法实现按指定数量拆分元素的需求,不需要手写遍历逻辑,以下是两种常用实现:
方法1:使用each_slice方法(不修改原数组,推荐)
each_slice是Ruby数组原生提供的分组方法,会按指定长度把数组切分为多个分组,全程不改动原始数组内容,适配你给出的示例的代码如下:
# 初始完整数组 original_array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40] # 按每7个元素为一组拆分,得到二维分组数组 groups = original_array.each_slice(7).to_a # 按顺序取值赋值即可 array2 = groups[0] # => [1,2,3,4,5,6,7] array3 = groups[1] # => [8,9,10,11,12,13,14] array = groups[2..].flatten # => [15,16,...,40],即拆分后剩余的所有元素
如果数组总长度不是7的整数倍,最后一组会自动收纳剩余不足7个的元素,不会报错或填充空值。
方法2:使用shift方法(直接修改原数组)
如果你不需要保留原始的完整数组,可以用shift方法直接从数组头部取出指定数量的元素,代码更简短:
array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40] array2 = array.shift(7) # 从数组头部移除并返回前7个元素 array3 = array.shift(7) # 再次从头部移除并返回接下来的7个元素 # 执行完以上两步后,array变量存储的就是拆分后剩余的[15,16,...,40],无需额外赋值
- 优先选
each_slice方案,避免修改原始数组带来的不可预期的副作用 - 两个方法都是Ruby内置实现,不需要引入任何第三方依赖,Rails环境和纯Ruby环境都可以直接使用
内容的提问来源于stack exchange,提问作者Roberto da Silva
相关产品推荐
相关产品推荐

