Ruby:从以某个索引为中心的数组中切出 n 个元素

标签 ruby

这里有一个数组、一个索引和一个数字 n,代表我要切出多少项

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
index = 5
n = 3

以上参数转换为给我 3 个以索引 5 为中心的元素,即 [4,5,6]

如果数字是偶数,则任意选择在左侧或右侧添加额外的元素。例如:给定 n = 2[4, 5][5,6] 都同样有效。

但是我们必须考虑边界情况。假设 index = 1n = 5,它应该返回 [0,1,2,3,4],因为我们已经命中左边的边界。

类似地,假设 index = 8n = 5,它应该返回 [5,6,7,8,9] 因为我们到达了右侧的边界。

什么是写这个的好方法?

最佳答案

您可以使用 Array#[] 获取切片

因此,像下面这样的东西应该可以正常工作:

arr[offset - (count / 2), count]

如果 offset 和 count 是 Fixnums,ruby 将正确处理除法和舍入以满足您给出的要求。

编辑 |您可能也应该清理算术,因为负偏移量对 #slice 有特殊意义。然后您还想清理最终值以允许整个计数适合:

arr[
  [[offset - (count / 2), 0].max, arr.size - count].min,
  count
]

现在有点毛茸茸,但就是这样。

关于Ruby:从以某个索引为中心的数组中切出 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10771700/

相关文章:

ruby - 具有更多选项的 Yaml

ruby - Mysql2:关闭客户端连接

ruby-on-rails - 如何在 erb 模板中发表评论?

ruby-on-rails - Druby 和 ActiveRecord 的线程问题

ruby - 使用 Capybara/Selenium/RSpec 抑制奇怪的输出

ruby - 如何使用 Sequel ORM 对同一个表中的一列求和以生成三个不同的聚合?

javascript - 在 Rails 4 JS/ERB 模板中嵌入 JSON

ruby - 来自 Shopify Liquid 的 API 调用

ruby - 将数组中的所有数字相加

ruby - Ruby 中的 DES ECB