ruby - 整数到块数组
问题描述
我需要将整数转换为间隔数组。例如,
number_to_steps(number: 10, step: 3)
# => [[0, 2], [3, 5], [6, 8], [9, 9]]
number_to_steps(number: 7, step: 2)
# => [[0, 1], [2, 3], [4, 5], [6, 6]]
number_to_steps(number: 8, step: 2)
# => [[0, 1], [2, 3], [4, 5], [6, 7]]
我试过:
def number_to_ranges(number:, size:)
chunks = ((number - 1) / size.to_f).ceil
(0..chunks - 1).map do |index|
from = index * size
to = (index + 1) * size - 1
[ from, to > number ? number : to ]
end
end
但它不能正常工作。例如,
number_to_ranges(number: 14, step: 4)
[[0, 3], [4, 7], [8, 11], [12, 14]]
不应该去14。
任何的想法?
解决方案
另一种方法(您的方法)是使用each_slice
.
def number_to_steps(number:, step:)
(0...number).each_slice(step).map { |arr| [arr.first, arr.last] }
end
测试:
number_to_steps(number: 10, step: 3)
#=> [[0, 2], [3, 5], [6, 8], [9, 9]]
number_to_steps(number: 7, step: 2)
#=> [[0, 1], [2, 3], [4, 5], [6, 6]]
number_to_steps(number: 8, step: 2)
#=> [[0, 1], [2, 3], [4, 5], [6, 7]]
推荐阅读
- python - 从 total 中提取值 505 ,文件无法加载为 json 文件
- angular - 如何获取以角度传递给路由器链接的数据?
- javascript - 使用字符串字母顺序的jQuery排序数组
- python - 在抓取的 href 链接之前添加“https:”?
- ruby-on-rails - 从活动记录查询中选择 * 而不是 table.*
- php - 如何在不编辑核心文件的情况下修改 woocommerce 包含文件?或者有没有办法将包含文件复制到子主题?
- php - 如何在 CentOS 7 上从 PHP 7.x 更新到 PHP 7.4
- arrays - 如何获取不在MongoDB聚合管道中另一个数组中的数组元素?
- python - =AutoPairsDelete() 在 vim 中使用风筝和自动配对时插入
- git - Azure DevOps 中活动拉取请求中的块合并