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

MxL*_*evs 1 ruby

给定一个数组:

a = [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

我想旋转的元素i,通过j在某些方向n倍.所以,例如:

i = 2
j = 3
n = 1
Run Code Online (Sandbox Code Playgroud)

旋转a会产生:

new_a = [1, 2, 4, 3, 5, 6]
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的:

def rotate_sub(a, i, j, n)
  return a[0...i] + a[i..j].rotate(n) + a[j+1..-1]
end
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?由于没有绑定检查,i或者j很可能超出数组的范围.

Dig*_*oss 5

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

a[i..j] = a[i..j].rotate n
Run Code Online (Sandbox Code Playgroud)

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