在C#中,如何动态地改变数组的长度和范围?请举例说明

在C#中,如何动态地改变数组的长度和范围?请举例说明

编码文章call10242025-02-09 12:01:4010A+A-

在 C# 中,数组的长度是固定的,一旦数组被创建,其长度就不能直接改变。然而,可以通过创建一个新数组并将原数组的内容复制到新数组中,从而间接地实现“动态改变数组的长度”。对于更高效和动态的操作,建议使用动态集合如 List

以下是几种实现方式:


方法 1:创建新数组并复制内容

如果需要动态扩展或缩小数组,可以手动创建一个新的数组并复制原始数组的内容。

示例代码

using System;

class Program
{
    static void Main()
    {
        // 原数组
        int[] originalArray = { 1, 2, 3 };
        Console.WriteLine("原数组长度: " + originalArray.Length);

        // 创建一个新数组,长度为原数组 + 2
        int[] newArray = new int[originalArray.Length + 2];

        // 复制原数组内容到新数组
        Array.Copy(originalArray, newArray, originalArray.Length);

        // 添加新元素
        newArray[3] = 4;
        newArray[4] = 5;

        Console.WriteLine("新数组长度: " + newArray.Length);
        Console.WriteLine("新数组内容: " + string.Join(", ", newArray));
    }
}

输出

原数组长度: 3
新数组长度: 5
新数组内容: 1, 2, 3, 4, 5

方法 2:使用List动态管理数组

List 是动态数组的实现,提供了灵活的长度操作方法,如 Add、Remove 等。

示例代码

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 使用 List 替代数组
        List dynamicList = new List { 1, 2, 3 };
        Console.WriteLine("原 List 长度: " + dynamicList.Count);

        // 添加新元素
        dynamicList.Add(4);
        dynamicList.Add(5);

        // 移除一个元素
        dynamicList.Remove(2);

        Console.WriteLine("新 List 长度: " + dynamicList.Count);
        Console.WriteLine("新 List 内容: " + string.Join(", ", dynamicList));
    }
}

输出

原 List 长度: 3
新 List 长度: 4
新 List 内容: 1, 3, 4, 5

方法 3:扩展或缩减数组的范围(通过数组切片)

在 C# 8.0 及更高版本中,可以使用 System.Span 或 ArraySegment 来创建数组的切片,这并不会真正改变数组的长度,但可以限制对数组的视图范围。

示例代码(数组切片)

using System;

class Program
{
    static void Main()
    {
        int[] array = { 1, 2, 3, 4, 5 };

        // 创建一个数组切片
        Span slice = array.AsSpan(1, 3); // 包括索引 1 到 3 的元素
        Console.WriteLine("数组切片: " + string.Join(", ", slice.ToArray()));

        // 修改切片中的元素
        slice[0] = 10;
        Console.WriteLine("原数组修改后: " + string.Join(", ", array));
    }
}

输出

数组切片: 2, 3, 4
原数组修改后: 1, 10, 3, 4, 5

方法 4:使用Array.Resize方法

C# 提供了一个方便的方法 Array.Resize,它可以动态调整数组大小(实际上是创建了一个新数组并复制内容)。

示例代码

using System;

class Program
{
    static void Main()
    {
        int[] array = { 1, 2, 3 };
        Console.WriteLine("原数组长度: " + array.Length);

        // 调整数组大小
        Array.Resize(ref array, 5);
        array[3] = 4;
        array[4] = 5;

        Console.WriteLine("调整后数组长度: " + array.Length);
        Console.WriteLine("调整后数组内容: " + string.Join(", ", array));
    }
}

输出

原数组长度: 3
调整后数组长度: 5
调整后数组内容: 1, 2, 3, 4, 5

总结

方法

优点

缺点

手动复制内容到新数组

灵活,可以完全控制新数组的大小

手动操作麻烦,效率较低

使用 List 动态管理

动态调整,功能丰富,简单易用

需要额外的内存开销(不是原生数组)

使用数组切片

内存效率高,不需要复制数组

只提供视图,不改变实际数组的大小

使用 Array.Resize

简单快捷,自动完成数组调整

底层仍需创建新数组,效率不如 List

在需要频繁动态调整数组长度的场景下,建议优先使用 List。如果仅需要对数组的特定范围操作,Span或切片是更高效的选择。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4