如何在数组中的其他两个之间插入项目

时间:2016-05-12 17:14:09

标签: c# .net arrays object swap

我有以下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。有关如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分: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;

}

请注意,一旦创建的数组被分配了连续的位置,并且具有固定的大小。他们不能随心所欲地移动。

如果您需要各种此类操作,我建议使用linked list数据结构。

答案 1 :(得分:0)

从你的帖子中,听起来你想要从阵列中弹出最后一项,而不是第一项。

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

我们可以在Tilak的代码中优化一点,不要覆盖数组[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将是更好的选择。

答案 2 :(得分:0)

我只需要一盏灯就可以了。我使用Tilak的示例作为我的基础,我做了以下代码(还有更多的东西,比如在列表的末尾加上一个起始的空数组):

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都会激活,以便我的数组始终具有我需要的确切数量的插槽。