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

news2024/11/15 11:17:04

目录

一、使用的方法

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 index
            for (int i = 0; i < indexToInsert; i++)
            {
                dynamicArray.Add(originalArray[i]);
            }

            // Insert the element at the specified index
            dynamicArray.Add(elementToInsert);

            // Copy remaining elements from original array to dynamic array
            for (int i = indexToInsert; i < originalArray.Length; i++)
            {
                dynamicArray.Add(originalArray[i]);
            }

            // Convert dynamic array to a new array and return
            return [.. 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))        //判断遍历到的索引是否小于添加索引加1
                        TemArray[i] = ArrayBorn[i];
                    else if (i == (Index + 1))//判断遍历到的索引是否等于添加索引加1
                        TemArray[i] = Value;
                    else
                        TemArray[i] = ArrayBorn[i - 1];
                }
                else
                {
                    if (i == 0)//数组首位置
                        TemArray[i] = Value;
                    else
                        TemArray[i] = ArrayBorn[i - 1];
                }
            }
            return TemArray;
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp 使用renderjs引入echarts

效果图&#xff1a; 1.1renderjs引入echarts 组件zmui-echarts.vue&#xff1a; <template><view class"zmui-echarts" :prop"option" :change:prop"echarts.delay"></view> </template><script>export defaul…

Qt代码添加日志管理的模块功能

在程序中一般需要添加日志管理的记录&#xff0c;在学习Httpserver的过程中&#xff0c;学习到了日志管理模块&#xff0c;将QtwebApp的日志模块提取出来可作为一般性程序的日志管理&#xff0c;记录实验的过程&#xff0c;项目源代码也附在后面。 项目运行结果 项目代码结构 参…

一周学会Django5 Python Web开发-Django5介绍及安装

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计10条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

进阶C语言-通讯录的实现

通讯录 🎈1.设计要求🎈2.程序实现🔭2.1打印菜单及初始化通讯录🔭2.2显示所有联系人🔭2.3查找指定的联系人🔭2.4删除指定的联系人🔭2.5查找指定的联系人🔭2.6修改指定联系人🔭2.7按照年龄排序(以此为例)🎈3.全部源码以及实现🎈1.设计要求 🌞通过前面…

2.4-学成在线内容管理之项目实战

内容管理模块 文章目录 内容管理模块9 项目实战9.1 实战环境9.1.1 实战流程 9.2 删除课程计划9.2.1 需求分析9.2.2 接口定义9.2.3 接口开发9.2.4 接口测试 9.3 课程计划排序9.3.1 需求分析9.3.2 接口定义9.3.3 接口开发9.3.4 接口测试 9.4 师资管理9.4.1 需求分析9.4.2 接口定义…

第2节、让电机转起来【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍用简单的方式&#xff0c;让步进电机转起来。其目的之一是对电机转动有直观的感受&#xff0c;二是熟悉整个开发流程。本系列教程必要的51单片机基础包括IO口操作、中断、定时器三个部分&#…

2020年通信工程师初级 综合能力 真题

文章目录 第1章 通信职业道德&#xff0c;1-4第2章 法律法规&#xff0c;5-16第3章 计算机应用基础&#xff0c;第5章 现代通信网&#xff0c;38英语题&#xff0c;91 第1章 通信职业道德&#xff0c;1-4 1、职业道德在形式上具有()特点。 A.一致性 B.统一性 C.多样性 D.一般性…

基于SpringBoot+Vue的外卖点餐管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

人生,总要读几本好书!

以前&#xff0c;没有重视过读书的重要性 但是自从进入老马的陪伴群之后&#xff0c;听了老马的一路成长经历&#xff0c;才发现&#xff0c;所谓的一鸣惊人&#xff0c;都是厚积薄发的表现 大佬们在出人头地之前&#xff0c;都是有过很长一段时间的自我提升的 这个提升的方…

如何利用边缘计算网关进行机床数据采集,以提高数据采集的效率和准确性-天拓四方

边缘计算网关集成了数据采集、处理和传输功能的嵌入式设备。它位于传感器和执行器组成的设备层与云计算平台之间&#xff0c;能够实时处理和响应本地设备的数据请求&#xff0c;减轻云平台的压力&#xff0c;提高数据处理的速度和效率。同时&#xff0c;边缘计算网关还可以将处…

Qt 的安装以及项目的创建

目录 Qt简介Qt 开发环境安装的过程环境变量的配置Qt SDK 中的重要的工具创建一个 Qt 项目 Qt简介 开始安装教程前&#xff0c;首先来了解一下什么是QT。 QT&#xff08;Quick Thought&#xff09;是一个基于Qt库的快速应用程序开发框架。它提供了一套完整的开发工具和库&…

DataX详解和架构介绍

系列文章目录 一、 DataX详解和架构介绍 二、 DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录DataX是什么&#xff…

spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用

为了防止理解问题&#xff0c;pom.xml 版本依赖如下 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!--…

【开源】SpringBoot框架开发城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统&#xff0c;支持…

结构体的特殊声明和自引用

结构体的特殊声明 结构体我们通常是这么声明的&#xff1a; struct Student { char name[20]; int age; int num; }; 或者 struct Student { char name[20]; int age; int num; }s1, s2; 这是我们正常的声明方式&#xff0c; 也是正规的声明方式&#xff0c; 第二…

第三百一十一回

文章目录 1. 概念介绍2. 使用方法3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何在输入框中提示错误"相关的内容&#xff0c;本章回中将介绍如何在输入框中处理光标.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在使用TextField组件作为…

【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现

盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现 前提回顾消息服务逻辑架构运作流程消息路由系统数据存储系统BitCask结构异地存储容灾 推送系统数据消费模式推、拉模式的切换 实现低延时推送快速确认消息三层存储结构HeapMemoryDirectMemory 总结和展望 前提回顾…

【Mybatis】从0学习Mybatis(2)

前言 本篇文章是从0学习Mybatis的第一篇文章&#xff0c;由于篇幅太长CSDN会限流&#xff0c;因此我打算分开两期来写&#xff0c;这是第二期&#xff01;第一期在这儿&#xff1a;【Mybatis】从0学习Mybatis&#xff08;1&#xff09;-CSDN博客 1.什么是ResultMap结果映射&am…

力扣热门100题 - 5.最长回文子串

力扣热门100题 - 5.最长回文子串 题目描述&#xff1a;示例&#xff1a;提示&#xff1a;解题思路&#xff1a;&#xff08;动态规划&#xff09;代码&#xff1a; 题目链接&#xff1a;5. 最长回文子串 题目描述&#xff1a; 给你一个字符串 s&#xff0c;找到 s 中最长的回…

Python爬虫requests库详解

使用 requests 上一节中&#xff0c;我们了解了 urllib 的基本用法&#xff0c;但是其中确实有不方便的地方&#xff0c;比如处理网页验证和 Cookies 时&#xff0c;需要写 Opener 和 Handler 来处理。为了更加方便地实现这些操作&#xff0c;就有了更为强大的库 requests&…