C#在既有数组中插入另一个数组:Array.Copy方法 vs 自定义插入方法

目录

一、使用的方法

1.使用Array.Copy方法

2.Copy(Array, Int32, Array, Int32, Int32)

3. 使用自定义的方法

二、实例

1.示例1:使用Array.Copy方法

2.示例2:使用自定义的方法


一、使用的方法

1.使用Array.Copy方法

        首先定义了一个名为InsertArray的函数,它接受三个参数:一个原始数组originalArray,一个索引index和一个要插入的数组arrayToInsert。我们首先计算新数组的大小,然后创建一个新的数组newArray。接下来,我们使用Array.Copy方法将原始数组的一部分复制到新数组中,然后将要插入的数组复制到新数组中的指定索引位置。最后,我们再次使用Array.Copy方法将原始数组的剩余部分复制到新数组中。最后,我们使用foreach循环遍历新数组并输出每个元素。

        这个方法会修改原始数组。如果您不希望修改原始数组,可以在方法开始时创建原始数组的副本。

2.Copy(Array, Int32, Array, Int32, Int32)

        复制 Array 中的一系列元素(从指定的源索引开始),并将它们粘贴到另一 Array 中(从指定的目标索引开始)。 长度和索引指定为 32 位整数。

public static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);参数
sourceArray    Array
包含要复制的数据的 Array。sourceIndex    Int32
一个 32 位整数,它表示 sourceArray 中复制开始处的索引。destinationArray    Array
接收数据的 Array。destinationIndex    Int32
一个 32 位整数,它表示 destinationArray 中存储开始处的索引。length    Int32
一个 32 位整数,它表示要复制的元素数目。例外
ArgumentNullException
sourceArray 上声明的默认值为 null。
或
destinationArray 为 null。RankException
sourceArray 和 destinationArray 具有不同的秩。ArrayTypeMismatchException
sourceArray 和 destinationArray 属于不兼容的类型。InvalidCastException
sourceArray 中至少有一个元素无法转换为 destinationArray 的类型。ArgumentOutOfRangeException
sourceIndex 少于 sourceArray 的第一个维度的下限。
- 或 -
destinationIndex 少于 destinationArray 的第一个维度的下限。
- 或 -
length 小于零。ArgumentException
length 大于从 sourceIndex 到 sourceArray 末尾的元素数。
- 或 -
length 大于从 destinationIndex 到 destinationArray 末尾的元素数。

3. 使用自定义的方法

        首先需要定义两个一维数组,分别用来作为原始数组和要插入的数组,然后修改原始数组的长度(这里使用Length属性分别获取原始数组和要插入数组的长度,然后把获得的长度相加,作为新数组的长度),从而在其中增加一个数组。

二、实例

1.示例1:使用Array.Copy方法

// 要将一个数组插入到另一个数组的指定索引位置,可以使用以下方法:namespace _096_1
{internal class Program{private static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);int[] originalArray = [1, 2, 3, 4, 5];int index = 2;int[] arrayToInsert = [7,8,9];InsertArray(originalArray, index, arrayToInsert);Console.WriteLine();}/// <summary>/// 向数组中插入数组的方法/// </summary>/// <param name="originalArray">源数组</param>/// <param name="index">要出入的索引位置</param>/// <param name="arrayToInsert">要插入的数组</param>public static void InsertArray(int[] originalArray, int index, int[] arrayToInsert){int newSize = originalArray.Length + arrayToInsert.Length;int[] newArray = new int[newSize];Array.Copy(originalArray, 0, newArray, 0, index);Array.Copy(arrayToInsert, 0, newArray, index, arrayToInsert.Length);Array.Copy(originalArray, index, newArray, index + arrayToInsert.Length, originalArray.Length - index);foreach (int item in newArray){Console.Write(item + " ");}}}
}
//运行结果:
/*
1 2 7 8 9 3 4 5*/

2.示例2:使用自定义的方法

// 在数组中添加另一个数组
namespace _096
{public partial class Form1 : Form{private Label? label1;private Label? label2;private Label? label3;private TextBox? textBox1;private TextBox? textBox2;private TextBox? textBox3;private Button? button1;private RichTextBox? richTextBox1;private Label? label4;private int[] int_array1 = new int[8];//定义数组类型变量private int[] int_array2 = new int[4];//定义数组类型变量public Form1(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // label1// label1 = new Label{AutoSize = true,Location = new Point(12, 9),Name = "label1",Size = new Size(56, 17),TabIndex = 0,Text = "源数组:"};label1.Click += Label1_Click;// // label2// label2 = new Label{AutoSize = true,Location = new Point(12, 38),Name = "label2",Size = new Size(80, 17),TabIndex = 1,Text = "插入的数组:"};label2.Click += Label2_Click;// // label3// label3 = new Label{AutoSize = true,Location = new Point(196, 38),Name = "label3",Size = new Size(44, 17),TabIndex = 2,Text = "索引:"};// // textBox1// textBox1 = new TextBox{Location = new Point(97, 3),Name = "textBox1",Size = new Size(230, 23),TabIndex = 3};// // textBox2// textBox2 = new TextBox{Location = new Point(94, 32),Name = "textBox2",Size = new Size(100, 23),TabIndex = 4};// // textBox3// textBox3 = new TextBox{Location = new Point(242, 32),Name = "textBox3",Size = new Size(40, 23),TabIndex = 5};// // button1// button1 = new Button{Location = new Point(286, 32),Name = "button1",Size = new Size(41, 23),TabIndex = 6,Text = "插入",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // richTextBox1// richTextBox1 = new RichTextBox{Location = new Point(12, 88),Name = "richTextBox1",Size = new Size(315, 46),TabIndex = 7,Text = ""};// // label4// label4 = new Label{AutoSize = true,Location = new Point(12, 67),Name = "label4",Size = new Size(56, 17),TabIndex = 8,Text = "新数组:"};// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(339, 146);Controls.Add(label4);Controls.Add(richTextBox1);Controls.Add(button1);Controls.Add(textBox3);Controls.Add(textBox2);Controls.Add(textBox1);Controls.Add(label3);Controls.Add(label2);Controls.Add(label1);Name = "Form1";Text = "向数组中插入另一个数组";}/// <summary>/// 生成源数组/// </summary>private void Label1_Click(object? sender, EventArgs e){textBox1!.Clear();for (int i = 0; i < int_array1.GetUpperBound(0) + 1; i++){int_array1[i] = i;}for (int i = 0; i < int_array1.GetUpperBound(0) + 1; i++){textBox1.Text += int_array1[i] + " ";}}/// <summary>/// 生成要插入的数组/// </summary>private void Label2_Click(object? sender, EventArgs e){textBox2!.Clear();for (int i = 0; i <= int_array2.GetUpperBound(0); i++){int_array2[i] = i+3;}for (int i = 0; i <= int_array2.GetUpperBound(0); i++){textBox2!.Text += int_array2[i] + " ";}}/// <summary>/// 执行插入事件,调用插入方法/// </summary>private void Button1_Click(object? sender, EventArgs e){richTextBox1!.Clear();if ((textBox1!.Text != "") && (textBox2!.Text != "") && (textBox3!.Text != "")){int_array1 = AddArray(int_array1, int_array2, Convert.ToInt32(textBox3!.Text));for (int i = 0; i < int_array1.GetUpperBound(0) + 1; i++){richTextBox1.Text += int_array1[i] + " ";}}else{MessageBox.Show("输入的信息不能为空", "提示");}  }/// <summary>/// 向一维数组中添加一个数组/// </summary>/// <param name="ArrayBorn">源数组</param>/// <param name="ArrayAdd">要添加的数组</param>/// <param name="Index">添加索引</param>/// <returns>新得到的数组</returns>static int[] AddArray(int[] ArrayBorn, int[] ArrayAdd, int Index){if (Index >= ArrayBorn.Length)Index = ArrayBorn.Length - 1;int[] TemArray = new int[ArrayBorn.Length + ArrayAdd.Length];//声明一个新的数组for (int i = 0; i < TemArray.Length; i++){if (Index >= 0){if (i < (Index /*+ 1*/))//在索引位置插入,注释掉的:在索引的下一个位置插入TemArray[i] = ArrayBorn[i];//交换元素值else if (i == (Index /*+ 1*/)){for (int j = 0; j < ArrayAdd.Length; j++)TemArray[i + j] = ArrayAdd[j];i = i + ArrayAdd.Length - 1;}elseTemArray[i] = ArrayBorn[i - ArrayAdd.Length];}else{if (i == 0)//判断遍历到的索引是否为0{for (int j = 0; j < ArrayAdd.Length; j++)TemArray[i + j] = ArrayAdd[j];i = i + ArrayAdd.Length - 1;}elseTemArray[i] = ArrayBorn[i - ArrayAdd.Length];}}return TemArray;}}
}

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

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

相关文章

Mysql大表添加字段失败解决方案

背景 最近遇到一个问题&#xff0c;需要在user用户表千万级别数据中添加两个字段&#xff0c;发现老是加不上去&#xff0c;一直卡死。表数据量不仅大&#xff0c;而且是一个热点表&#xff0c;访问频率特别高&#xff0c;而且该表的访问是在一个大事务中。加字段的时候一直在…

人工智能福利站,初识人工智能,图神经网络学习,第三课

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统

代码下载&#xff1a; 基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库 1.研究的背景 水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而&#xff0c;由于水下环境的复杂性和特殊性&#xff0c;水下目标检测面临着许多挑…

读千脑智能笔记06_人工智能的未来(上)

1. 人工智能正在经历一场复兴&#xff0c;这是科技界最热门的领域之一 1.1. 大多数科学进步都建立在被广泛接受的理论框架之上。这种理论框架称为“科学范式” 1.2. 人工智能的未来将与大多数人工智能从业者如今的设想存在本质上的不同 1.3. 人工神经网络与人类大脑中的神经…

ChatGPT高效提问—prompt常见用法

ChatGPT高效提问—prompt常见用法 1.1 角色扮演 ​ prompt最为常见的用法是ChatGPT进行角色扮演。通常我们在和ChatGPT对话时&#xff0c;最常用的方式是一问一答&#xff0c;把ChatGPT当作一个单纯的“陪聊者”。而当我们通过prompt为ChatGPT赋予角色属性后&#xff0c;即使…

JCTC | 利用几何深度学习对蛋白质-配体结合pose进行等变灵活建模

Overview 该论文解决了药物开发中蛋白质-配体复合结构灵活建模的挑战。作者提出了一种名为FlexPose的新型深度学习框架&#xff0c;它可以直接对复杂结构进行建模&#xff0c;而不需要传统的采样和评分策略。 该模型结合了标量-向量双特征表示和 SE(3)等变网络设计来处理动态结…

成倍降本增效,提升企业竞争力!SOFAServerless 品牌升级为 Koupleless,重磅发布 1.0 版本...

如果你是企业经营者&#xff0c;在为企业降本增效而发愁&#xff1b;如果你是企业的开发、运维或架构同学&#xff0c;在日常工作中被开发效率、交付问题等困扰…… 欢迎来了解 Koupleless&#xff08;原 SOFAServerless&#xff09;&#xff01; 现在&#xff0c;Koupleless 重…

2024-01-06-AI 大模型全栈工程师 - 机器学习基础

摘要 2024-01-06 阴 杭州 晴 本节简介: a. 数学模型&算法名词相关概念; b. 学会数学建模相关知识&#xff1b; c. 学会自我思考&#xff0c;提升认知&#xff0c;不要只会模仿&#xff1b; 课程内容 1. Fine-Tuning 有什么作用&#xff1f; a. 什么是模型训练&#xff…

Python程序员面试题精选及解析(2)

本文精心挑选了10道Python程序员面试题&#xff0c;覆盖了Python的多个核心领域&#xff0c;包括装饰器、lambda函数、列表推导式、生成器、全局解释器锁(GIL)、单例模式以及上下文管理器等。每道题都附有简洁的代码示例&#xff0c;帮助读者更好地理解和应用相关知识点无论是对…

MCU+SFU视频会议一体化,视频监控,指挥调度(AR远程协助)媒体中心解决方案。

视频互动应用已经是政务和协同办公必备系统&#xff0c;早期的分模块&#xff0c;分散的视频应该不能满足业务需要&#xff0c;需要把视频监控&#xff0c;会议&#xff0c;录存一体把视频资源整合起来&#xff0c;根据客户需求&#xff0c;需要能够多方视频互动&#xff0c;直…

【MATLAB】使用随机森林在回归预测任务中进行特征选择(深度学习的数据集处理)

1.随机森林在神经网络的应用 当使用随机森林进行特征选择时&#xff0c;算法能够为每个特征提供一个重要性得分&#xff0c;从而帮助识别对目标变量预测最具影响力的特征。这有助于简化模型并提高其泛化能力&#xff0c;减少过拟合的风险&#xff0c;并且可以加快模型训练和推理…

npm修改镜像源

背景&#xff1a;切换npm镜像源是经常遇到的事&#xff0c;下面记录下具体操作命令 1. 打开终端运行"npm config get registry"命令来查看当前配置的镜像源 npm config get registry2. 修改成淘宝镜像源"https://registry.npmjs.org/" npm config set re…