2012-10-30 84 views
1

旋轉元件i到j在給定的陣列的陣列

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

我想在一些方向上旋轉元件i通過jn倍。因此,舉例來說:

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可能會超出數組的範圍。

+4

嗯,加約束的檢查,你是好去的,不是嗎? :) –

回答

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 
5

如果你願意變異原數組,你可以這樣做:

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

可是我喜歡你已經擁有的功能的解決方案。

+0

如果您使用'dup',即使不改變原稿,您也可以使用自己的方式。 – sawa