更改对象的位置阵列假设我有类似如下:大多数Efficiate方式使用Groovy
['a', 'b', 'c', 'd', 'e', 'f', 'g']
而我必须将它更改为:
['a', 'b', 'f', 'c', 'd', 'e', 'g']
什么是最有效的如何做到这一点?
更新:我实际上需要移位的元素,没有交换。请注意上面我的示例的更改。
更改对象的位置阵列假设我有类似如下:大多数Efficiate方式使用Groovy
['a', 'b', 'c', 'd', 'e', 'f', 'g']
而我必须将它更改为:
['a', 'b', 'f', 'c', 'd', 'e', 'g']
什么是最有效的如何做到这一点?
更新:我实际上需要移位的元素,没有交换。请注意上面我的示例的更改。
我不知道“有效”是指“以一种清晰可读的方式”,还是指的是性能。如果是前者,你想要做的就地更换,你可以使用得心应手[]
操作的列表:
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']
+1:不要担心优化,直到你的程序运行缓慢。然后分析你的程序并找出哪些功能占用了大部分时间,并解决这个问题。单个阵列重新排列将不会做任何事情。 – Patashu 2013-02-09 08:02:18
虽然这解决了我的问题,但我认为我稍微问了一个问题。我的问题不像交换那么简单。它实际上需要改变其他因素。我会更新我的问题。 – Gregg 2013-02-09 08:06:23
@Gregg更新回答:)。虽然我只是绊倒了,或者当我再次看到你的问题时,因为我的回答与它无关(这里已经很晚了= P)。我不得不检查问题的编辑,以确认我没有发疯。 – epidemian 2013-02-09 08:34:56
N.B.这是一个列表,而不是一个数组;-) – 2013-02-09 20:46:30