C#静态数组删除数组元素不改变数组长度 vs 动态数组删除数组元素改变数组长度

目录

一、使用的方法

1.对静态数组删除指定长度并不改变数长度的方法

(1)静态数组

(2)对静态数组删除元素不得改变其长度

2.对动态数组删除指定长度并改变数长度的方法

(1)动态数组

(2)对动态数组删除元素并改变其长度

二、实例1:静态数组并不改变数组长度

1.源码

2.生成效果

三、实例2:动态数组并改变数组长度

1.源码

2.生成效果 


一、使用的方法

1.对静态数组删除指定长度并不改变数长度的方法

(1)静态数组

        静态数组是指数组元素的个数是固定不变的,即它们占用的内存空间大小是固定不变的。

(2)对静态数组删除元素不得改变其长度

        首先需要定义一个一维数组、要删除的开始索引和要删除的长度,然后判断要删除的开始索引和删除的长度是否超出了数组的范围,如果超出,则返回;否则,使用数组中后面的值覆盖前面的值,并将删除长度的数组后面的元素值全部初始化为0,这样就实现了在不改变数组长度的情况下,删除数组中元素的功能。

2.对动态数组删除指定长度并改变数长度的方法

(1)动态数组

        动态数组的声明实际上就是将数组的声明部分和初始化部分分别写在不同的语句中。动态数组的初始化也需要使用new关键字为数组元素分配内存空间,并为数组元素赋初值。

(2)对动态数组删除元素并改变其长度

        首先需要定义一个一维数组、要删除的开始索引和要删除的长度,然后判断要删除的开始索引和删除的长度是否超出了数组的范围。如果删除长度超出了数组范围,则将要删除的元素个数设置为数组的长度;如果删除的开始索引和删除长度超出了数组范围,则将要删除的元素个数设置为数组的长度减去删除开始索引,再减去1;然后定义一个新的数组,其长度设置为原数组长度减去上述运算所得到的长度,最后遍历新数组,并且为新数组的每一个索引赋相应的值即可,这样就实现了删除数组元素后改变其长度的功能。

二、实例1:静态数组并不改变数组长度

1.源码

// 不改变长度删除数组中的元素
namespace _097
{public partial class Form1 : Form{private Button? button1;private TextBox? textBox1;private Label? label1;private Label? label2;private TextBox? textBox2;private TextBox? textBox3;private Button? button2;private Label? label3;private RichTextBox? richTextBox1;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, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "生成数组",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // textBox1// textBox1 = new TextBox{Location = new Point(120, 12),Name = "textBox1",Size = new Size(187, 23),TabIndex = 1};// // label1// label1 = new Label{AutoSize = true,Location = new Point(12, 38),Name = "label1",Size = new Size(68, 17),TabIndex = 2,Text = "开始索引:"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(12, 60),Name = "label2",Size = new Size(68, 17),TabIndex = 3,Text = "删除个数:"};// // textBox2// textBox2 = new TextBox{Location = new Point(120, 35),Name = "textBox2",Size = new Size(100, 23),TabIndex = 4};// // textBox3// textBox3 = new TextBox{Location = new Point(120, 60),Name = "textBox3",Size = new Size(100, 23),TabIndex = 5};// // button2// button2 = new Button{Location = new Point(232, 60),Name = "button2",Size = new Size(75, 23),TabIndex = 6,Text = "删除",UseVisualStyleBackColor = true};button2.Click += Button2_Click;// // label3// label3 = new Label{AutoSize = true,Location = new Point(12, 83),Name = "label3",Size = new Size(56, 17),TabIndex = 7,Text = "新数组:"};// // richTextBox1// richTextBox1 = new RichTextBox{Location = new Point(12, 106),Name = "richTextBox1",Size = new Size(295, 43),TabIndex = 8,Text = ""};// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(319, 161);Controls.Add(richTextBox1);Controls.Add(label3);Controls.Add(button2);Controls.Add(textBox3);Controls.Add(textBox2);Controls.Add(label2);Controls.Add(label1);Controls.Add(textBox1);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>/// 删除数组元素的事件/// 调用删除方法/// </summary>private void Button2_Click(object? sender, EventArgs e){int index = Convert.ToInt32(textBox2!.Text);int length = Convert.ToInt32(textBox3!.Text);if ((index < 0)||(length < 0)){MessageBox.Show("数组元素索引和删除长度应>0", "提示");return;}else{richTextBox1!.Clear();DeleteArray(int_array, index, length);for (int i = 0; i < int_array.GetUpperBound(0) + 1; i++){richTextBox1.Text += int_array[i] + " ";}}}/// <summary>/// 删除数组中的元素方法/// 如果超出数组范围时,删除长度设=数组长度/// 若索引+长度超出了数组范围,则 Len=数组长度-索引-1/// 后面的元素逐个迁移Len,覆盖删除的,最后补0/// </summary>/// <param name="ArrayBorn">要从中删除元素的数组</param>/// <param name="Index">删除索引</param>/// <param name="Len">删除的长度</param>static void DeleteArray(int[] ArrayBorn, int Index, int Len){if (Index == 0 && Len >= ArrayBorn.Length){Len = ArrayBorn.Length;}if ((Index + Len) >= ArrayBorn.Length){Len = ArrayBorn.Length - Index;}for (int i = 0; i < ArrayBorn.Length - Index - Len; i++)ArrayBorn[i + Index] = ArrayBorn[i + Len + Index];  //前移Lenfor (int j = ArrayBorn.GetUpperBound(0); j > (ArrayBorn.GetUpperBound(0) - Len); j--)//Length-1=索引ArrayBorn[j] = 0;   //补0   }}
}

2.生成效果

三、实例2:动态数组并改变数组长度

1.源码

// 改变长度删除数组中的元素
namespace _098
{public partial class Form1 : Form{private Button? button1;private TextBox? textBox1;private Label? label1;private Label? label2;private TextBox? textBox2;private TextBox? textBox3;private Button? button2;private Label? label3;private RichTextBox? richTextBox1;private readonly int[] int_array = new int[8];//定义数组类型变量public Form1(){InitializeComponent();InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(12, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "生成数组",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // textBox1// textBox1 = new TextBox{Location = new Point(120, 12),Name = "textBox1",Size = new Size(187, 23),TabIndex = 1};// // label1// label1 = new Label{AutoSize = true,Location = new Point(12, 38),Name = "label1",Size = new Size(68, 17),TabIndex = 2,Text = "开始索引:"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(12, 60),Name = "label2",Size = new Size(68, 17),TabIndex = 3,Text = "删除个数:"};// // textBox2// textBox2 = new TextBox{Location = new Point(120, 35),Name = "textBox2",Size = new Size(100, 23),TabIndex = 4};// // textBox3// textBox3 = new TextBox{Location = new Point(120, 60),Name = "textBox3",Size = new Size(100, 23),TabIndex = 5};// // button2// button2 = new Button{Location = new Point(232, 60),Name = "button2",Size = new Size(75, 23),TabIndex = 6,Text = "删除",UseVisualStyleBackColor = true};button2.Click += Button2_Click;// // label3// label3 = new Label{AutoSize = true,Location = new Point(12, 83),Name = "label3",Size = new Size(56, 17),TabIndex = 7,Text = "新数组:"};// // richTextBox1// richTextBox1 = new RichTextBox{Location = new Point(12, 106),Name = "richTextBox1",Size = new Size(295, 43),TabIndex = 8,Text = ""};// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(319, 161);Controls.Add(richTextBox1);Controls.Add(label3);Controls.Add(button2);Controls.Add(textBox3);Controls.Add(textBox2);Controls.Add(label2);Controls.Add(label1);Controls.Add(textBox1);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>/// 删除数组元素的事件/// 调用删除方法/// </summary>private void Button2_Click(object? sender, EventArgs e){int index = Convert.ToInt32(textBox2!.Text);int length = Convert.ToInt32(textBox3!.Text);if ((index < 0) || (length < 0)){MessageBox.Show("数组元素索引和删除长度应>0", "提示");return;}else{richTextBox1!.Clear();int[] temArray = DeleteArray(int_array, index, length);for (int i = 0; i < temArray.GetUpperBound(0) + 1; i++){richTextBox1.Text += temArray[i] + " ";}}}/// <summary>/// 删除数组中的元素方法并改变数组长度/// 此方法不改变源数组,即源数组始终存在/// 后面的元素逐个迁移Len,覆盖删除的/// </summary>/// <param name="ArrayBorn">要从中删除元素的数组</param>/// <param name="Index">删除索引</param>/// <param name="Len">删除的长度</param>static int[] DeleteArray(int[] ArrayBorn, int Index, int Len){if (Index == 0 && Len >= ArrayBorn.Length){Len = ArrayBorn.Length;MessageBox.Show("因源数组元素被删光新数组没有元素", "提示");}if ((Index + Len) >= ArrayBorn.Length)//此时,新数组=源数组在索引位置被截尾{Len = ArrayBorn.Length - Index;}int[] temArray = new int[ArrayBorn.Length - Len];   //声明一个新的数组for (int i = 0; i < temArray.Length; i++)           //遍历新数组{if (i >= Index)                                 //判断遍历索引是否大于等于删除索引temArray[i] = ArrayBorn[i + Len];//为遍历到的索引元素赋值elsetemArray[i] = ArrayBorn[i];         //为遍历到的索引元素赋值}return temArray;                            //返回得到的新数组}}
}

2.生成效果 

 

 

 

 

 

 

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

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

相关文章

Linux 命令基础

Shell概述 Linux操作系统的Shell作为操作系统的外壳&#xff0c;为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell是用户和Linux内核之间的接口程序&#xff0c;如果把硬件想象成一个球体的中心&#xff0c;内核围绕在硬件的外层管理着…

vscode +git +gitee 文件管理

文章目录 前言一、gitee是什么&#xff1f;2. Gitee与VScode连接大概步骤 二、在vscode中安装git1.安装git2.安装过程3.安装完后记得重启 三、使用1.新建文件夹first2.vscode 使用 四、连接git1.初始化仓库2.设置git 提交用户和邮箱3.登陆gitee账号新建仓库没有的自己注册一个4…

python进行批量搜索匹配替换文本文字的matlab操作实例

在进行一些数据处理时&#xff0c;可能需要抓取原文中的一些内容&#xff0c;批量替换原文另外的一些内容&#xff0c;而且事先还需要一步搜索匹配的步骤。 举个例子&#xff0c;如下matlab输出的txt文件&#xff0c;原文件有几万行数据&#xff0c;这里只摘取3行对应的 文件文…

单片机学习笔记---DS1302时钟

上一节我们讲了DS1302的工作原理&#xff0c;这一节我们开始代码演示。 新创建一个工程写上框架 我们需要LCD1602进行显示&#xff0c;所以我们要将LCD1602调试工具那一节的LCD1602的模块化代码给添加进来 然后我们开始创建一个DS1302.c和DS1302.h 根据原理图&#xff0c;为了…

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

spring 版本以及相关的组件一直在变化&#xff0c;其中一些类或者功能在低版本中有&#xff0c;高版本中去掉了&#xff0c;有的新功能只在高版本有。 为了防止理解问题&#xff0c;pom.xml 版本依赖如下 <parent><groupId>org.springframework.boot</groupId…

leetcode 3027. 人员站位的方案数 II【离散化前缀和+枚举】

原题链接&#xff1a;3027. 人员站位的方案数 II 题目描述&#xff1a; 给你一个 n x 2 的二维数组 points &#xff0c;它表示二维平面上的一些点坐标&#xff0c;其中 points[i] [xi, yi] 。 我们定义 x 轴的正方向为 右 &#xff08;x 轴递增的方向&#xff09;&#x…

STM32Cubmax DAC 采集

一、概念 DMA&#xff0c;全称为&#xff1a; Direct Memory Access&#xff0c;即直接存储器访问&#xff0c; DMA 传输将数据从一个 地址空间复制到另外一个地址空间。 当 CPU 初始化这个传输动作&#xff0c;传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动…

怎么理解 Redis 事务

背景 在面试中经常会被问到&#xff0c;redis支持事务吗&#xff1f;事务是怎么实现的&#xff1f;事务会回滚吗&#xff1f;又是一键三连&#xff0c;我下面分析下&#xff0c;看看能不能吊打面试官 什么是Redis事务 事务是一个单独的隔离操作&#xff1a;事务中的所有命令…

嵌入式学习之Linux入门篇笔记——17,makefile基本语法(上)

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 目录 一&#xff0e;设置 vim 首行缩进 二.Makefile 基本语法…

golang windows 环境搭建 环境配置

golang windows 环境搭建 环境配置 Golang学习之路一环境搭建 MacBook Linux 树莓派raspberrypi安装Golang环境 官网下载地址: https://go.dev/dl/ https://golang.google.cn/dl/ 下载对应系统版本&#xff0c;例如windows 64位系统&#xff0c;下载&#xff1a;xxx.window…

云计算市场分析

目录 一、云计算市场概述 1.1 概述 二、国外云计算厂商 2.1 亚马逊AWS 2.2 微软AzureAzure 2.3 Apple iCloud 三、国内云计算厂商 3.1 阿里云 3.2 腾讯云 3.3 华为云 3.4 百度智能云 一、云计算市场概述 1.1 概述 云计算从出现以来&#xff0c;其发展就非常迅速。以…

【数据结构】前缀树的模拟实现

目录 1、什么是前缀树&#xff1f; 2、模拟实现 2.1、前缀树节点结构 2.2、字符串的添加 2.3、字符串的查寻 2.3.1、查询树中有多少个以字符串"pre"作为前缀的字符串 2.3.2、查询某个字符串被添加过多少次 2.4、字符串的删除 3、完整代码 1、什么是前缀树&…

MacOS - M1芯片 Mac 在“恢复”模式中启用系统扩展教程

部分软件需要开启系统扩展才能正常使用&#xff0c;但是默然M1芯片的Mac不能直接打开系统扩展&#xff0c;如下两图。 若要启用系统扩展&#xff0c;您需要在“恢复”环境中修改安全性设置。 若要执行此操作&#xff0c;请将系统关机&#xff0c;然后按住触控ID或电源按钮以开…

CSS高级技巧

一、 精灵图 1.1 为什么需要精灵图&#xff1f; 1.2 精灵图&#xff08;sprites&#xff09;的使用 二、 字体图标 2.1 字体图标的产生 2.2 字体图标的优点 2.3 字体图标的下载 icomoom字库 http://icomoon.io 阿里iconfont字库 http://www.iconfont.cn/ 2.4 字体图标的引用…

在 Docker 中启动 ROS2 里的 rivz2 和 rqt 出现错误的解决方法

1. 出现错误&#xff1a; 运行 ros2 run rivz2 rivz2 &#xff0c;报错如下 &#xff1a; No protocol specified qt.qpa.xcb: could not connect to display :1 qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was f…

npm 上传一个自己的应用(2) 创建一个JavaScript函数 并发布到NPM

上文 npm 上传一个自己的应用(1) 搭建一个项目环境 带着大家创建了一个项目环境 我们打开 看json的配置 我们入口是一个叫 index.js 的文件 那么 我们就要把它创建出来 之后 我们的方法也就要写在这里面 和 json同一个目录 创建 index.js 我们这里 写个简单的求和操作 index…

图论与图数据应用综述:从基础概念到知识图谱与图智能

目录 前言1 图论基础概念1.1 节点度1.2 度分布1.3 邻接矩阵 2 探索图的高级概念2.1 最短路径的关键性2.2 图的直径与平均路径的意义2.3 循环与路径类型的多样性 3 深入探讨图的广泛应用领域3.1 知识图谱的知识管理3.2 图智能在复杂决策中的应用3.3 图数据挖掘与分析的多领域应用…

5.electron之主进程起一个本地服务

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

Rust开发WASM,WASM Runtime运行

安装wasm runtime curl https://wasmtime.dev/install.sh -sSf | bash 查看wasmtime的安装路径 安装target rustup target add wasm32-wasi 创建测试工程 cargo new wasm_wasi_demo 编译工程 cargo build --target wasm32-wasi 运行 wasmtime ./target/wasm32-wasi/d…

小白水平理解面试经典题目LeetCode 20. Valid Parentheses【栈】

20.有效括号 小白渣翻译 给定一个仅包含字符 ‘(’ 、 ‘)’ 、 ‘{’ 、 ‘}’ 、 ‘[’ 和 ‘]’ &#xff0c;判断输入字符串是否有效。 输入字符串在以下情况下有效&#xff1a; 左括号必须由相同类型的括号封闭。 左括号必须按正确的顺序关闭。 每个右括号都有一个对…