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

How to insert an item between other two in an array

我有以下 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。我该怎么做?

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

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

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数据结构。

从您的 post 看来,您想从数组中弹出最后一项而不是第一项。

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

我们可以对 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 将是更好的选择。

我只需要一盏灯就可以了。我以 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 都会激活,这样我的阵列将始终具有我需要的确切数量的插槽。