C#向数组指定索引位置插入新的元素值:自定义插入方法 vs List<T>.Add(T) 方法

目录

一、使用的方法

1.自定义插入方法 

2.使用List.Add(T) 方法

二、实例

1.示例1:List.Add(T) 方法

2.示例:自定义插入方法


一、使用的方法

1.自定义插入方法 

        首先需要定义一个一维数组,然后修改数组的长度(这里使用Length属性获取数组的长度,然后加1,作为新数组的长度),从而在其中增加一个元素。只有增加了数组的长度以后才能在这个数组中增加新的元素。

2.使用List<T>.Add(T) 方法

        关于 List<T>.Add(T) 定义,详见本文作者写的其他文章,C#用Array类的FindAll方法和List<T>类的Add方法按关键词在数组中检索元素并输出-CSDN博客  https://wenchm.blog.csdn.net/article/details/136032895

        首先,创建一个与原始数组大小相同的动态数组(例如,List<T>)。然后,将原始数组的元素复制到动态数组中,直到到达要插入元素的索引位置。在动态数组中插入新元素。将原始数组中剩余的元素复制到动态数组中。最后,将动态数组转换回数组并返回。

二、实例

1.示例1:List<T>.Add(T) 方法

// 将一个元素插入到现有数组的指定索引位置,
// 并将原来位于该位置的元素向后移动namespace _095_1
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);int[] originalArray = [1, 2, 3, 4, 5];int elementToInsert = 10;int indexToInsert = 2;int[] newArray = InsertElement(originalArray, elementToInsert, indexToInsert);Console.WriteLine(string.Join(", ", newArray));}static int[] InsertElement(int[] originalArray, int elementToInsert, int indexToInsert){List<int> dynamicArray = new(originalArray.Length);// Copy elements from original array to dynamic array until the insertion indexfor (int i = 0; i < indexToInsert; i++){dynamicArray.Add(originalArray[i]);}// Insert the element at the specified indexdynamicArray.Add(elementToInsert);// Copy remaining elements from original array to dynamic arrayfor (int i = indexToInsert; i < originalArray.Length; i++){dynamicArray.Add(originalArray[i]);}// Convert dynamic array to a new array and returnreturn [.. dynamicArray];}}
}
//运行结果:
/*
1, 2, 10, 3, 4, 5*/

2.示例:自定义插入方法

//在既有数组中的指定位置插入一个新的元素,
//并遍历输出新数组
namespace _095
{public partial class Form1 : Form{private Button? button1;private Button? button2;private Label? label1;private Label? label2;private TextBox? textBox1;private TextBox? textBox2;private RichTextBox? richTextBox1;private Label? label3;private TextBox? textBox3;private int[] int_array = new int[8];public Form1(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(12, 9),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "生成数组",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // button2// button2 = new Button{Location = new Point(224, 36),Name = "button2",Size = new Size(43, 23),TabIndex = 1,Text = "确定",UseVisualStyleBackColor = true};            button2.Click += Button2_Click;// // label1// label1 = new Label{AutoSize = true,Location = new Point(12, 42),Name = "label1",Size = new Size(56, 17),TabIndex = 2,Text = "插入索引"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(12, 69),Name = "label2",Size = new Size(56, 17),TabIndex = 3,Text = "新数组:"};// // textBox1// textBox1 = new TextBox{Location = new Point(93, 9),Name = "textBox1",Size = new Size(174, 23),TabIndex = 4};// // textBox2// textBox2 = new TextBox{Location = new Point(73, 36),Name = "textBox2",Size = new Size(40, 23),TabIndex = 5};          // // richTextBox1// richTextBox1 = new RichTextBox{Location = new Point(12, 90),Name = "richTextBox1",Size = new Size(254, 44),TabIndex = 6,Text = ""};// // label3// label3 = new Label{AutoSize = true,Location = new Point(118, 42),Name = "label3",Size = new Size(56, 17),TabIndex = 7,Text = "插入元素"};// // textBox3// textBox3 = new TextBox{Location = new Point(179, 36),Name = "textBox3",Size = new Size(40, 23),TabIndex = 8};// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(279, 146);Controls.Add(textBox3);Controls.Add(label3);Controls.Add(richTextBox1);Controls.Add(textBox2);Controls.Add(textBox1);Controls.Add(label2);Controls.Add(label1);Controls.Add(button2);Controls.Add(button1);Name = "Form1";Text = "在数组中添加一个元素";}/// <summary>/// 生成数组事件/// 遍历生成整形数组,并遍历输出/// </summary>private void Button1_Click(object? sender, EventArgs e){textBox1!.Clear();for (int i = 0; i < int_array.GetUpperBound(0) + 1; i++){int_array[i] = i;}for (int i = 0; i < int_array.GetUpperBound(0) + 1; i++){textBox1.Text += int_array[i] + " ";}}/// <summary>/// 确定插入事件/// 在生成的数组索引=4的位置插入一个元素,并遍历输出/// 这个事件不仅调用AddArray方法,更是在调用该方法之后改变了数组的大小/// </summary>private void Button2_Click(object? sender, EventArgs e){richTextBox1!.Clear();if ((textBox2!.Text != "")&& (textBox3!.Text !="")&& (textBox3!.Text.Length == 1)){int_array = AddArray(int_array, Convert.ToInt32(textBox2!.Text), Convert.ToInt32(textBox3!.Text));for (int i = 0; i < int_array.GetUpperBound(0) + 1; i++){richTextBox1.Text += int_array[i] + " ";}}else{MessageBox.Show("输入信息不能为空且元素长度恒为1", "提示");}}/// <summary>/// 向数组中插入单个元素的方法/// </summary>/// <param name="ArrayBorn">要向其中添加元素的一维数组</param>/// <param name="Index">添加索引</param>/// <param name="Value">添加值</param>/// <returns></returns>static int[] AddArray(int[] ArrayBorn, int Index, int Value){if (Index >= ArrayBorn.Length)Index = ArrayBorn.Length - 1;int[] TemArray = new int[ArrayBorn.Length + 1];//声明一个新的数组for (int i = 0; i < TemArray.Length; i++){if (Index >= 0){if (i < (Index + 1))        //判断遍历到的索引是否小于添加索引加1TemArray[i] = ArrayBorn[i];else if (i == (Index + 1))//判断遍历到的索引是否等于添加索引加1TemArray[i] = Value;elseTemArray[i] = ArrayBorn[i - 1];}else{if (i == 0)//数组首位置TemArray[i] = Value;elseTemArray[i] = ArrayBorn[i - 1];}}return TemArray;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456504.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面理解jvm

jvm是什么&#xff1f; java虚拟机 为什么要学jvm&#xff1f; 解决性能调优&#xff0c;优化内存空间&#xff0c;防止服务崩掉的问题。同时是java的工作环境, 一些基于java开发的语言Scale &#xff0c; Jpython都可以运行在java虚拟机上。 jvm的工作原理&#xff1a; 类加…

第9章 安全漏洞、威胁和对策(9.11-9.16)

9.11 专用设备 专用设备王国疆域辽阔&#xff0c;而且仍在不断扩张。 专用设备是指为某一特定目的而设计&#xff0c;供某一特定类型机构使用或执行某一特定功能的任何设备。 它们可被看作DCS、物联网、智能设备、端点设备或边缘计算系统的一个类型。 医疗设备、智能汽车、…

类图(Class diagram)

类图主要是用来展现软件系统中的类、接口以及它们之间的静态结构 。 一、元素 1、类 ​ 从上到下分为三部分&#xff0c;分别是类名、属性和操作。 类名是必须有的。​类如果有属性&#xff0c;则每一个属性必须有一个名字&#xff0c;另外还可以有其他的描述信息&#xff…

JVM-JVM内存结构(二)

堆 堆(Heap) 通过new关键字&#xff0c;创建的对象都会使用堆内存特点&#xff1a; 他是线程共享的&#xff0c;堆中的对象需要考虑线程安全的问题有垃圾回收机制 堆内存溢出(OutOfMemoryError) 代码演示 List<String> list new ArrayList<>(); try{String …

【学习笔记】树上差分总结(点差分/边差分)

一.树上差分的基本概念 1.树上差分的定义 树上差分&#xff0c;顾名思义&#xff0c;意思就是在树上做差分。 至于什么是差分呢&#xff1f;如果不会的同学&#xff0c;可以先看看我的这篇博客:一维,二维差分の详解&#xff08;简单易懂&#xff09;_一维差分-CSDN博客 2.树…

【Java EE】----Bean的作用域和生命周期

1.Bean的作用域 定义&#xff1a;Bean 的作⽤域是指 Bean 在 Spring 整个框架中的某种⾏为模式&#xff0c;⽐如 singleton 单例作⽤域&#xff0c;就 表示 Bean 在整个 Spring 中只有⼀份 &#xff08;产生的原因&#xff0c;Bean 默认情况下是单例状态&#xff08;singleton&…

c#cad 创建-多线段(三)

运行环境 vs2022 c# cad2016 调试成功 一、程序说明 AutoCAD中创建多段线的。具体解释如下&#xff1a; 获取当前文档和数据库&#xff0c;并创建一个编辑器&#xff08;用于与用户交互&#xff09;。使用事务处理的方式&#xff0c;开始对数据库的操作。打开模型空间&…

mysql事务锁

Lock - 事务锁 与 latch 的区别 lock对象是事务&#xff0c;用来锁定的是数据库中的对象&#xff0c;如表、行、页。并且一般lock的对象仅在事务commit或rollback后进行释放&#xff08;不同事务隔离级别释放的时间可能不同&#xff09;。此外&#xff0c;lock&#xff0c;正…

Damn Small Linux 停更16年后,2024 回归更新

Damn Small Linux(DSL) 发行版释出了最新的 2024 版本&#xff0c;并重新定义了什么叫“Damn Small”。 DSL 诞生于 2005 年&#xff0c;原本是尝试提供一个 50MB 大小的 LiveCD&#xff0c;2008 年开发停滞。 2024 年原作者 John Andrews 宣布 DSL 复活&#xff0c;在几乎所…

信号系统之线性系统详解

1 线性系统 信号描述了一个参数如何随另一个参数变化。例如&#xff0c;电子电路中的电压随时间变化&#xff0c;或图像中随距离变化的亮度。系统是响应输入信号而产生输出信号的任何过程。如图中的框图所示。 有几个规则用于命名信号&#xff1a; 连续信号使用圆括号&#x…

Android:Android Studio安装及环境配置

1开发环境搭建 Android开发需要使用java的jdk环境,所以需要下载JAVA JDK。 1.1安装配置JAVA JDK Java的JDK下载: https://www.oracle.com/technetwork/java/javase/downloads/index.html 配置java的环境变量: JAVA_HOME:java安装路径。 新增环境变量CLASSPATH 在Path环境…

执行时长 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 为了充分发挥GPU算力&#xff0c;需要尽可能多的将任务交给GPU执行&#xff0c;现在有一个任务数组&#xff0c;数组元素表示在这1秒内新增的任务个数且每秒都有新…