3

这是一个数组、一个索引和一个数字 n,表示我要切出多少项目

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

上述参数转换为give me 3 elements centered around index 5,即[4,5,6]

如果数字是偶数,那么只需随意选择左侧或右侧的额外元素。例如: Givenn = 2[4, 5][5,6]同样有效。

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

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

有什么好方法来写这个?

4

1 回答 1

4

您可以使用Array#[]

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

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

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

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

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

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

于 2012-05-27T04:49:34.110 回答