C#既然数组长度不可改变,那么如何动态调整集合类型数组大小,以便添加或删除元素?

news/2025/1/15 21:44:21/

目录

1.使用动态数组(ArrayList):

2.使用 jagged array(不规则数组):

3.使用 List :

4.使用数组复制:


        在C#中,数组的长度是固定的,一旦声明和初始化,就不能更改。但是,您可以使用其他集合类型,例如ArrayList或List<T>,这些类型可以动态调整大小以添加或删除元素。

1.使用动态数组(ArrayList):

        动态数组是一种可以在运行时改变大小的数组。当你需要添加或删除元素时,它会自动调整自身的大小。

// 使用 ArrayList 可以动态调整数组的大小。
using System.Collections;namespace _106_8
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);// 初始化 ArrayListArrayList arrayList =[new int[] { 1, 2 },new int[] { 3, 4, 5 },new int[] { 6, 7, 8, 9 },];// 打印原始数组Console.WriteLine("原始数组:");PrintArray(arrayList);// 添加新行Console.WriteLine();// 动态调整数组大小arrayList.Capacity = 5;// 初始化新数组arrayList.Add(new int[] { 10, 11 });arrayList.Add(new int[] { 12, 13, 14 });// 打印调整大小后的数组Console.WriteLine("调整大小后的数组:");PrintArray(arrayList);}static void PrintArray(ArrayList array){foreach (var row in array){Console.Write("[" + string.Join(", ", (int[])row) + "]");Console.WriteLine();}}}
}
//运行结果:
/*
原始数组:
[1, 2]
[3, 4, 5]
[6, 7, 8, 9]调整大小后的数组:
[1, 2]
[3, 4, 5]
[6, 7, 8, 9]
[10, 11]
[12, 13, 14]*/

2.使用 jagged array(不规则数组):

        jagged array 是一种数组的数组,它可以用来模拟可变大小的数组。jaggedArray 的大小是可变的,你可以根据需要改变它。

        首先创建了一个 jagged array,并初始化了一些数据。然后,使用 ResizeArray 函数将 jaggedArray 的大小调整为 5,然后添加了一些新的数据。最后,使用 PrintArray 函数打印了调整大小后的数组。
        注意,这种方法并不会真正改变 jagged array 中每个子数组的大小,而是通过创建一个新的 jagged array 来实现动态调整大小的效果。如果你需要在运行时真正地改变数组的大小,可以考虑使用其他数据结构,如动态数组(ArrayList)。

// 使用 jagged array(不规则数组)
// 可以实现动态调整数组大小的效果
namespace _106_7
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);// 初始化 jaggedArrayint[][] jaggedArray =[[1, 2],[3, 4, 5],[6, 7, 8, 9],];// 打印原始数组Console.WriteLine("原始数组:");PrintArray(jaggedArray);// 添加新行Console.WriteLine();// 动态调整数组大小jaggedArray = ResizeArray(jaggedArray, 5);// 初始化新数组jaggedArray[3] = [10, 11];jaggedArray[4] = [12, 13, 14];// 打印调整大小后的数组Console.WriteLine("调整大小后的数组:");PrintArray(jaggedArray);}static int[][] ResizeArray(int[][] jaggedArray, int newSize){int[][] newArray = new int[newSize][];Array.Copy(jaggedArray, newArray, Math.Min(jaggedArray.Length, newSize));return newArray;}static void PrintArray(int[][] array){foreach (var row in array){Console.Write("[" + string.Join(", ", row) + "]");Console.WriteLine();}}}
}
//运行结果:
/*
原始数组:
[1, 2]
[3, 4, 5]
[6, 7, 8, 9]调整大小后的数组:
[1, 2]
[3, 4, 5]
[6, 7, 8, 9]
[10, 11]
[12, 13, 14]*/

3.使用 List<T> :

         使用 List<T> 也可以动态调整数组的大小。

        首先创建了一个 List<int[]>,并初始化了一些数据。然后,使用 Capacity 属性将 List<int[]> 的大小调整为 5,然后添加了一些新的数据。最后,我们使用 PrintArray 函数打印了调整大小后的数组。
        注意,这种方法会真正地改变 List<int[]> 中每个子数组的大小,因为它会动态地分配和释放内存。但是,由于 List<int[]> 是基于对象的,所以它比数组更慢,如果你需要更高的性能,可以考虑使用其他数据结构,如数组。

// 使用 List<T> 也可以动态调整数组的大小namespace _106_9
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);// 初始化 List<int[]>List<int[]> list =[[1, 2],[3, 4, 5],[6, 7, 8, 9],];// 打印原始数组Console.WriteLine("原始数组:");PrintArray(list);// 添加新行Console.WriteLine();// 动态调整数组大小list.Capacity = 5;// 初始化新数组list.Add([10, 11]);list.Add([12, 13, 14]);// 打印调整大小后的数组Console.WriteLine("调整大小后的数组:");PrintArray(list);}static void PrintArray(List<int[]> list){foreach (var row in list){Console.Write("[" + string.Join(", ", row) + "]");Console.WriteLine();}}}
}
//运行结果:
/*
原始数组:
[1, 2]
[3, 4, 5]
[6, 7, 8, 9]调整大小后的数组:
[1, 2]
[3, 4, 5]
[6, 7, 8, 9]
[10, 11]
[12, 13, 14]*/

4.使用数组复制:

        创建一个新的数组,将旧数组的元素复制到新数组中,然后释放旧数组。这是一种比较低效的方法,但在某些情况下可能会有用。

// 复制旧数组并增加数组长度
namespace _106_7
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);int[] oldArray = new int[10];//... 初始化 oldArrayint[] newArray = new int[oldArray.Length * 2];Array.Copy(oldArray, newArray, oldArray.Length);int newlength = newArray.Length;Console.WriteLine("新数组长度= {0}", newlength);}}
}
//运行结果:
/*
新数组长度= 20*/


http://www.ppmy.cn/news/1351819.html

相关文章

MySQL性能调优篇(7)-MySQL的集群部署和优化

MySQL的集群部署和优化 MySQL是一种常用的关系型数据库管理系统&#xff0c;可以用于存储和管理大量的结构化数据。为了满足高并发和大规模数据存储需求&#xff0c;MySQL的集群部署和优化变得非常重要。本篇博客将介绍MySQL的集群部署方法和一些优化技巧。 一、MySQL集群部署…

学习笔记19:牛客寒假训练营(DFHJK)

D 数组长度为2*1e5 ,我们知道如果超过30个非&#xff08;-1&#xff0c;1&#xff09;的数字相乘一定是大于查询的值域的 所以如果超过60&#xff08;30*2&#xff09;个数字&#xff0c;那么一定不能构成查询的数&#xff0c;而如果小于60个则可以暴力预处理一下&#xff0c…

【MATLAB】PSO_BP神经网络回归预测(多输入多输出)算法原理

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 PSO-BP神经网络回归预测&#xff08;多输入多输出&#xff09;算法是一种结合粒子群优化算法&#xff08;PSO&#xff09;和反向传播&#xff08;BP&#xff09;神经网络的混合算法。该算…

【小沐学GIS】基于Python绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第二期3【小沐…

基金分类

一、按基金运作方式分类 &#xff08;一&#xff09;封闭式基金 是基金份额总额在期限内固定不变&#xff0c;在期限内不可申购和赎回。 &#xff08;二&#xff09;开放式基金 是基金份额总额不固定&#xff0c;在期限内可以申购和赎回。 这里的开放式基金特指传统的开放式基…

变形金刚:第 2 部分:变形金刚的架构

目录 一、说明 二、实现Transformer的过程 第 1 步&#xff1a;代币化&#xff08;Tokenization&#xff09; 第 2 步&#xff1a;对每个单词进行标记嵌入 第 3 步&#xff1a;对每个单词进行位置嵌入 第 4 步&#xff1a;输入嵌入 第 5 步&#xff1a;编码器层 2.5.1 多头自注…

浅谈Linux环境

冯诺依曼体系结构&#xff1a; 绝大多数的计算机都遵守冯诺依曼体系结构 在冯诺依曼体系结构下各个硬件相互配合处理数据并反馈结果给用户 其中控制器和运算器统称为中央处理器&#xff08;CPU&#xff09;&#xff0c;是计算机硬件中最核心的部分&#xff0c;像人类的大脑操控…

steam游戏搬砖项目靠谱吗?有没有风险?

作为一款fps射击游戏&#xff0c;csgo在近几年可谓是火出圈&#xff0c;作为一款全球竞技游戏&#xff0c;深受玩家喜爱追捧&#xff0c;玩家追求的就是公平公正&#xff0c;各凭本事&#xff0c;像其他游戏可能还会有皮肤等装备属性加成&#xff0c;在csgo里面是不存在的。 纯…