这里有一个数组、一个索引和一个数字 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 = 1
和 n = 5
,它应该返回 [0,1,2,3,4]
,因为我们已经命中左边的边界。
类似地,假设 index = 8
和 n = 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/