将元素i转换为数组中的j

时间:2012-10-30 00:17:30

标签: ruby

给定一个数组:

a = [1, 2, 3, 4, 5, 6]

我想在i次的某个方向上将元素j引导至n。所以,例如:

i = 2
j = 3
n = 1

旋转a将产生:

new_a = [1, 2, 4, 3, 5, 6]

这就是我所拥有的:

def rotate_sub(a, i, j, n)
  return a[0...i] + a[i..j].rotate(n) + a[j+1..-1]
end

有更好的方法吗?由于没有绑定检查,ij很可能超出数组的范围。

2 个答案:

答案 0 :(得分:5)

如果您愿意改变原始数组,可以执行以下操作:

a[i..j] = a[i..j].rotate n

但我喜欢你已经拥有的功能解决方案。

答案 1 :(得分:2)

我不认为这是一种神奇的方式,所以也许最简单的是最好的:

def rotate_sub(a, i, j, n)
  a[0...i] + a[i..j].rotate(n) + a[j+1..-1] if i < j && j < a.size
end