当前位置: 首页 > news >正文

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

目录

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*/

相关文章:

  • KingSCADA实现按钮点击效果
  • HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核内存管理-动态内存
  • 在PyTorch中,如何查看深度学习模型的每一层结构?
  • [高并发] - 1.高并发综述
  • 代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
  • 有了NULL,为什么C++还需要nullptr?
  • Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思维)
  • 书生浦语-模型微调
  • 用HTML和CSS打造跨年烟花秀视觉盛宴
  • 新的风口:继ChatGPT热潮后,OpenAI又推出视频生成新浪潮
  • 【AIGC】Stable Diffusion介绍
  • nginx upstream server主动健康监测模块添加https检测功能
  • 拿捏c语言指针(上)
  • 【微服安全】API密钥和令牌与微服务安全的关系
  • Windows 环境下 Redis 的安装和基本使用
  • 【面试系列】之二:关于js原型
  • FastReport在线报表设计器工作原理
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • java概述
  • js继承的实现方法
  • springboot_database项目介绍
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 分布式熔断降级平台aegis
  • 基于web的全景—— Pannellum小试
  • 山寨一个 Promise
  • 深入浏览器事件循环的本质
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 最简单的无缝轮播
  • 《天龙八部3D》Unity技术方案揭秘
  • Hibernate主键生成策略及选择
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #Linux(帮助手册)
  • #vue3 实现前端下载excel文件模板功能
  • $GOPATH/go.mod exists but should not goland
  • (1)Android开发优化---------UI优化
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (C语言)逆序输出字符串
  • (k8s中)docker netty OOM问题记录
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)Oracle存储过程编写经验和优化措施
  • ... 是什么 ?... 有什么用处?
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .java 9 找不到符号_java找不到符号
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core使用ef 6
  • .net 流——流的类型体系简单介绍
  • .Net 应用中使用dot trace进行性能诊断
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net操作Excel出错解决
  • .net与java建立WebService再互相调用
  • .php文件都打不开,打不开php文件怎么办
  • /dev/sda2 is mounted; will not make a filesystem here!
  • :“Failed to access IIS metabase”解决方法