2013-02-09 41 views
0

更改對象的位置陣列假設我有類似如下:大多數Efficiate方式使用Groovy

['a', 'b', 'c', 'd', 'e', 'f', 'g'] 

而我必須將它更改爲:

['a', 'b', 'f', 'c', 'd', 'e', 'g'] 

什麼是最有效的如何做到這一點?

更新:我實際上需要移位的元素,沒有交換。請注意上面我的示例的更改。

+0

N.B.這是一個列表,而不是一個數組;-) – 2013-02-09 20:46:30

回答

5

我不知道「有效」是指「以一種清晰可讀的方式」,還是指的是性能。如果是前者,你想要做的就地更換,你可以使用得心應手[]操作的列表:

def arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] 

arr[2, 5] = arr[5, 2] 

assert arr == ['a', 'b', 'f', 'd', 'e', 'c', 'g'] 

更新:現在的問題是不是交換兩個元素,它是關於移動元素到另一個位置。要做到這一點,你可以使用一些Java ArrayList方法,讓你添加和刪除給定位置的元素。我認爲這是非常可讀的:

def arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] 

arr.add(2, arr.remove(5)) 

assert arr == ['a', 'b', 'f', 'c', 'd', 'e', 'g'] 
+0

+1:不要擔心優化,直到你的程序運行緩慢。然後分析你的程序並找出哪些功能佔用了大部分時間,並解決這個問題。單個陣列重新排列將不會做任何事情。 – Patashu 2013-02-09 08:02:18

+0

雖然這解決了我的問題,但我認爲我稍微問了一個問題。我的問題不像交換那麼簡單。它實際上需要改變其他因素。我會更新我的問題。 – Gregg 2013-02-09 08:06:23

+0

@Gregg更新回答:)。雖然我只是絆倒了,或者當我再次看到你的問題時,因爲我的回答與它無關(這裏已經很晚了= P)。我不得不檢查問題的編輯,以確認我沒有發瘋。 – epidemian 2013-02-09 08:34:56