2013-02-09 40 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