2016-05-12 36 views
1

我有以下object[] array如何在数组中插入其他两者之间的项目

array[0] = obj_1; 
array[1] = obj_2; 
array[2] = obj_3; 
array[3] = NULL; 
array[4] = NULL; 

,我需要插入array[1]array[2]这样之间的另一个元素:

array[0] = obj_1; 
array[1] = obj_2; 
array[2] = obj_New; 
array[3] = obj_3; 
array[4] = NULL; 

我有人建议之前不能使用List。任何想法,我该怎么做?

+0

数组是固定长度的结构,不支持动态插入新条目。如果你想在两个元素之间插入,最好选择'List'。 –

+0

@ S.Akbari那么,你不需要使用'List',但它更容易_lot_。列表在内部使用数组,因此它是_possible_。 –

+0

@ S.Akbari,我知道'Lists'有那些动态插入,但我真的**需要**来使用数组 –

回答

5

没有直接的办法。您需要首先移动元素,然后将值设置为所需的索引。

下面是示例代码段(没有任何数组索引检查)

void InsertItem(object[] array, int index, object val) 
{ 
    for(int i=index;i<array.Length;i++) 
    { 
    array[i] = array[i-1]; 
    } 
    array[index] = val; 

} 

待办事项一旦创建被分配contigigous位置该阵列,并且是固定大小。他们不能被任意移动。

如果您需要各种这样的操作,我会建议linked list数据结构。

+0

这个运动真的在答案中。考虑到您对阵列功能的限制,这个答案是准确的。 – gravity

+0

该代码覆盖索引大于'index'的所有值,其索引值为'index - 1'。例如,在'{1,2,3,4,5}'上调用'InsertItem(array,1,9)'返回'{1,9,1,1,1}'。 – Quantic

0

从你的文章中,它听起来像你想从数组中弹出最后一项而不是第一项。

如果是这样,就像Tilak建议的那样,最简单的方法是采取/确定项目必须插入的索引,并将项目从当前位置移动到下一个后续位置,最后将新项目添加到给定指数。如果数组已满,您会想要注意会发生什么情况,是否要删除最后一个项目?

我们可以在Tilak的代码中优化一点,不要覆盖array [index]项目两次,一次在循环中,一次在外面。

我会做一点不同的,我会从头开始,然后上去,所以你可以避免一个临时变量。

 

    void InsertItem(object[] array, int index, object val) 
    { 
     for(int i=array.Length - 1; i > index; i--) 
     { 
     array[i] = array[i-1]; 
     } 

     array[index] = val; 
    } 

像其他人一样,List或LinkedList将是更好的选择。

1

我只是需要一盏灯才能做到。我用提拉克的例子作为我的基地,我做了下面的代码(有一些像添加在列表的末尾,并与起始空数组更多的东西):

object[] array = new object[0]; 
public void Insert(int index, object val) 
    { 
     Array.Resize(ref array, array.Length + 1); 

     if (index >= array.Length-1) 
     { 
      array[array.Length - 1] = val; 
      return; 
     } 

     for (int i = 0; i < array.Length; i++) 
     { 
      if (index == i) 
      { 
       for (int idx = array.Length; idx > index; idx--) 
       { 
        array[idx-1] = array[idx-2]; 
       } 
       array[i] = val; 
       return; 
      } 
     } 
    } 

这是完全正常工作,并且Array.Resize激活每我插入一些东西,以便我的数组始终与我需要的插槽的数量完全一致。

相关问题