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…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...