在给定索引处将数组切成两半,但省略索引

时间:2016-10-18 13:25:25

标签: arrays ruby slice

给定数组

x = [2, 3, 4, 5, 6, 7]

我希望在某个点/索引处将其切成两半,并创建两个这样的切割子阵列,但忽略索引。 例如:

x = [2, 3, 4, 6, 70, 10]
left, right = x.slice_at_index(2)
left  = [2, 3]
right = [6, 70, 10]

我已尝试使用each_index,切片,块,但不能忽略索引元素。

5 个答案:

答案 0 :(得分:3)

left, right = x.take(index), x.drop(index.next)

答案 1 :(得分:1)

left = x[0..1]
right = x[3..-1]

答案 2 :(得分:1)

我认为,像array这样的文档可能会在下次帮助您。

所以, UPD 解决方案适合您:

x = [2, 3, 4, 6, 70, 10]
left, right = x.shift(2), x.drop(2.pred)

> left
=> [2, 3]
> right
=> [6, 70, 10] 

答案 3 :(得分:0)

你可以写一个方法:

def slice_at_index(array, index)
  left = array[0...index]  # 3 dots vs 2
  right = array[(index + 1)..-1]
  return [left, right]
end

但是,我通常会避免多次分配,例如left, right = slice_at_index(x, 2)作为样式规则。

答案 4 :(得分:0)

最简单的方法,也就是我认为最可读的方法是使用范围运算符..来指定数组中的索引。

def slice_at(array, index)
  left = array[0..(index - 1)]
  right = array[(index + 1)..-1]
  return [left, right]
end

如果您希望了解范围运算符在使用此方式时的工作原理,请阅读this post

请记住,您可以在Ruby中使用.....来生成范围。使用三个点将包括起点,但不包括终点,而使用两个点将包括起点和终点。查看更多here