如果只有删除/插入命令,如何在数组中移动元素?

时间:2014-08-17 13:54:52

标签: arrays algorithm cocoa nstableview

假设您有以下数组:

oldArray = ['d','e','f','i','j'];

并且你希望将它变成这个新数组:

newArray = ['d','j','f','i','e'];

您可能已经注意到,je已互换。

但要做到这一点,你必须通过使用一系列delete-insert命令对来转换数组。那是

deleteInsert(array,i,j) = {
    delete the element at index i,
    move all elements in indexes after i downwards,
    and finally insert the element at index j
}

你如何处理这个问题?

(作为背景信息,我试图让Cocoa的NSTableView类通过在表视图中移动行来正确更新和动画。)

2 个答案:

答案 0 :(得分:0)

1.保存并删除移动元素。  2.然后将所有后续元素向右移动直到移动元素目标的索引。 a。保存其中一个。 b。移动它。 c。将其插入到小于1的索引处。继续,直到您释放移动元素目标索引。  3.将移动元素插入当前自由索引中。

答案 1 :(得分:0)

与项目i交换项目j

  1. 确保i < j(如果i > j,然后交换(变量的值)ij;如果i = j,则返回)。
  2. deleteInsert(array, j, i)
  3. deleteInsert(array, i + 1, j)