【问题标题】:How to insert an item between other two in an array如何在数组中的其他两个之间插入一个项目
【发布时间】:2016-05-12 17:14:08
【问题描述】:

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

【问题讨论】:

  • 数组是不支持动态插入新条目的固定长度结构。如果要在两个元素之间插入,最好选择List
  • @S.Akbari 好吧,您没有必须使用List,但它很多更容易。 Lists 在内部使用一个数组,所以它是可能的
  • @S.Akbari,我知道 Lists 有这些动态插入,但我真的需要使用数组
  • @DStanley,挑战不使用List
  • 挑战是否允许您在互联网上向陌生人询问答案?似乎挑战的重点在于您思考

标签: c# .net arrays object swap


【解决方案1】:

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

下面是示例 sn-p(没有任何数组索引检查)

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

【讨论】:

  • 运动就在答案中。鉴于您对仅数组功能的限制,这个答案是准确的。
  • 此代码用在index - 1 找到的值覆盖索引处大于index 的所有值。例如,在 { 1, 2, 3, 4, 5 } 上调用 InsertItem(array, 1, 9) 返回 { 1, 9, 1, 1, 1 }
【解决方案2】:

从您的帖子中,听起来您想从数组中弹出最后一项,而不是第一项。

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

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

我会做一些不同的事情,我会从头开始向上,所以你可以避免临时变量。

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

正如其他人已经说过的,List 或 LinkedList 将是更好的选择。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2022-08-24
      • 2012-02-01
      • 1970-01-01
      • 2017-07-10
      • 2012-09-14
      • 1970-01-01
      • 2019-02-11
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多