如何在数组中的其他两个之间插入一个项目
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
都会激活,这样我的阵列将始终具有我需要的确切数量的插槽。
我有以下 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
都会激活,这样我的阵列将始终具有我需要的确切数量的插槽。