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

时间:2012-05-27 04:40:19

标签: ruby

这里有一个数组,一个索引和一个数字n代表我想要切出的项目数

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

上述参数转换为give me 3 elements centered around index 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],因为我们点击了右边的边界。

这是一个很好的写作方式吗?

1 个答案:

答案 0 :(得分:4)

您可以使用Array#[]

获得切片

因此,以下内容应该可以正常工作:

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

如果抵消和计数是Fixnums,ruby将正确处理除法和舍入以满足您的要求。

编辑|您也应该对算术进行消毒,因为负偏移对#slice具有特殊意义。然后,您还需要清理最终值以允许整个计数适合:

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

现在变得有点毛茸茸,但无论如何都是这样。