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;}}
}


相关文章:
C#在既有数组中插入另一个数组:Array.Copy方法 vs 自定义插入方法
目录 一、使用的方法 1.使用Array.Copy方法 2.Copy(Array, Int32, Array, Int32, Int32) 3. 使用自定义的方法 二、实例 1.示例1:使用Array.Copy方法 2.示例2:使用自定义的方法 一、使用的方法 1.使用Array.Copy方法 首先定义了一个名为InsertAr…...
上位机图像处理和嵌入式模块部署(linux开发板的选择)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 很多图像算法是通过上位机来完成的,比如说工业视觉当中的halcon,一般都是要运行在windows平台上面,并且需要高性…...
2024情人节送女朋友什么礼物?精准送礼看这个就对啦!男生必看!
爱情是生活中最美好的情感之一,而情人节则是表达这份感情的最佳时刻。在2024年的情人节来临之际,作为男生的你是否已经为心爱的她准备了一份特别的礼物呢?如果你还在犹豫不决,那么这篇文章就是为你准备的!我们将会从女…...
查询每张表占用磁盘空间大小(达梦数据库)
查询每张表占用磁盘空间大小 环境介绍 环境介绍 在迁移准备工作中,为了更好评估迁移时间,可以统计大表数量与大表的实际大小,为迁移规划做准备 --查看用户下面每张表占用的磁盘空间SELECT T.OWNER,T.SEGMENT_NAME,T.SEGMENT_TYPE,T.TABLESPACE_NAME,T.BYTES,T.BYTES/1024 BYT…...
Vue3——创建一个应用
文章目录 创建应用实例挂载应用没有模板的组件的挂载 应用配置多个应用实例 其实使用脚手架创建的vue项目的main.js文件中已经为我们配置好 vue应用的创建。 import { createApp } from vue import App from ./App.vue const app createApp(App) app.mount(#app)创建应用实例…...
深度学习系列56:使用whisper进行语音转文字
1. openai-whisper 这应该是最快的使用方式了。安装pip install -U openai-whisper,接着安装ffmpeg,随后就可以使用了。模型清单如下: 第一种方式,使用命令行: whisper japanese.wav --language Japanese --model…...
【Web - 框架 - Vue】随笔 - 通过`CDN`的方式使用`VUE 2.0`和`Element UI`
通过CDN的方式使用VUE 2.0和Element UI VUE 网址 https://cdn.bootcdn.net/ajax/libs/vue/2.7.16/vue.js源码 https://download.csdn.net/download/HIGK_365/88815507测试 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…...
设计模式(行为型模式)备忘录模式
目录 一、简介二、备忘录模式2.1、备忘录2.2、原发器2.3、备忘录模式 三、优点与缺点 一、简介 备忘录模式(Memento Pattern)是一种行为设计模式,旨在捕获一个对象的内部状态,并在不破坏对象封装的前提下将其保存,以便…...
opencv案例实战:条码区域分割
前言 识别二维码是一个日常生活中常见的应用,而识别之前,需要先分割出条形码的区域来获取条形码。我们可以使用OpenCV便捷的获取条码的区域。 逐步分析 为了了解数据处理的过程,我们逐步分析并显示处理过程 查看图像 在读入时,传入参数cv2.IMREAD_GRAYSCALE可以直接按…...
《MySQL》超详细笔记
目录 基本知识 主流数据库 数据库基本概念 MySQL启动 数据库基本命令 数据库 启动数据库 显示数据库 创建数据库 删除数据库 使用数据库 查询当前数据库信息 显示数据库中的表 导入数据库脚本 表 查看表的结构 查看创建某个表的SQL语句 数据库的查询命令 查询…...
商用密码
商用密码(Commercial Cryptography)涉及到多个方面,包括但不限于数据加密、数字签名、身份验证和安全通信等。商用密码的目的是保护信息的机密性、完整性和可用性,确保数据在存储和传输过程中的安全。以下是一些Java商用密码方向的…...
css1文本属性
一.颜色(color)(一般用16进制) 二.对齐(text-align) 三.装饰(text-decoration) 四.缩进(text-indent)(一般用2em)(有单位)…...
在容器中使用buildah构建镜像
简介 buildah是一个构建OCI标准镜像的工具,可以用来替代docker build 在常见的linux发行版中可直接通过包管理工具安装使用 # centos yum install buildah# ubuntu/debian apt install buildah# alpine apk add buildah其他发行版安装方法详见 github,…...
GPT4_VS_ChatGPT(from_nytimes)
GPT4 VS ChatGPT(from nytimes ) 正如文章官网博文:https://openai.com/research/gpt-4所述,GPT4仍有很多不足之处,还不及人类水平。纽约时报报道了一些人体验GPT4的效果和一些评价: Cade Metz 要求专家使…...
中兴R5300G4服务器查看服务器、主板序列号及硬盘RAID信息
本文在操作系统带内通过指令操作查看中兴R5300G4服务器、主板序列号及硬盘RAID信息。 一、中兴R5300G4服务器查看服务器、主板序列号 在Linux服务器上,可以使用dmidecode命令来查看服务器的硬件相关信息,由于该命令要读取系统的硬件信息,因…...
部署tomcat
1 idea打包完,找到target目录下的网站 我的叫做 test.webSYS 2 linux 安装 tomcat 后 修改conf下的server.xml中的Connector的port <Connector port"9001" protocol"HTTP/1.1"connectionTimeout"20000"redirectPort"8443…...
【Java 数据结构】枚举
枚举的使用 1 背景及定义2 使用3 枚举优点缺点4 枚举和反射4.1 枚举是否可以通过反射,拿到实例对象呢? 5 总结面试问题(单例模式学完后可以回顾): 1 背景及定义 public static final int RED 1; public static final int GREEN 2; public …...
Python(20)正则表达式(Regular Expression)中常用函数用法
大家好!我是码银🥰 欢迎关注🥰: CSDN:码银 公众号:码银学编程 正文 正则表达式 粗略的定义:正则表达式是一个特殊的字符序列,帮助用户非常便捷的检查一个字符串是否符合某种模…...
docker 离线安装镜像
一、导出镜像 下载完镜像后,我们需要将其导出为tar文件,以便在离线环境中使用。 执行以下命令导出镜像: docker save -o <保存路径>/<镜像名>_<版本>.tar <镜像名>:<版本>其中,<保存路径>是…...
由vscode自动升级导致的“终端可以ssh服务器,但是vscode无法连接服务器”
问题描述 简单来说就是,ssh配置没动,前两天还可以用vscode连接服务器,今天突然就连不上了,但是用本地终端ssh可以顺利连接。 连接情况 我的ssh配置如下: Host gpu3HostName aaaUser zwx现在直接在终端中进行ssh&am…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
