这里有一个数组,一个索引和一个数字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 = 1
和n = 5
,它应该返回[0,1,2,3,4]
,因为我们已经击中了左侧的边界。
同样,假设index = 8
和n = 5
,它应该返回[5,6,7,8,9]
,因为我们点击了右边的边界。
这是一个很好的写作方式吗?
答案 0 :(得分:4)
您可以使用Array#[]
因此,以下内容应该可以正常工作:
arr[offset - (count / 2), count]
如果抵消和计数是Fixnums,ruby将正确处理除法和舍入以满足您的要求。
编辑|您也应该对算术进行消毒,因为负偏移对#slice
具有特殊意义。然后,您还需要清理最终值以允许整个计数适合:
arr[
[[offset - (count / 2), 0].max, arr.size - count].min,
count
]
现在变得有点毛茸茸,但无论如何都是这样。