在指定索引处删除时调整数组

时间:2017-11-07 03:06:24

标签: c# arrays

我需要为这个特定项目使用数组。目前,array[10]中的每个索引都保存了名称。我想要做的是,如果我删除array[1],所有数据都会向上移动一个索引,从而释放array[10] = null。目前,我正在使用

public void Delete(int a)
{
    do
    {
        array[a] = array[a + 1];
    }
    while (array[a + 1] != null);
}

但是当我尝试使用

检索数组时
for (int h = 0; h < array.Length; h++)
{
    Console.WriteLine(array[h]);
}

会有一个差距,其中1,3,4 ......

有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

当您删除某个项目时,该项目索引之后的所有内容都需要向左移动一个项目。它之前的一切都将保持不变。因此,我们需要始终从该指数开始,而不是在它之前使用指数。方法如下:

public static void Delete(int index)
{
    if (index >= array.Length)
    {
        return;
    }
    if (index == array.Length - 1)
    {
        array[index] = null;
        return;
    }
    for (int i = index; i < array.Length - 1; i++)
    {
        array[i] = array[i + 1];
    }
    array[array.Length - 1] = null;
}

<== Fiddle Me ==>

答案 1 :(得分:0)

在删除指定索引处的元素后,需要调整数组大小。执行删除操作后,您可以致电Array.Resize

您可以通过以下方式调整大小:

    public static void Delete(int a)
    {   
        int resizedArrayLength = array.Length - 1;
        while(a < resizedArrayLength)
        {
            array[a] = array[a + 1];
            a++;
        }
        Array.Resize(ref array, resizedArrayLength); // this will resize your array to specified length.
    }