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.mzph.cn/news/674550.shtml

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

相关文章

【大模型上下文长度扩展】MedGPT:解决遗忘 + 永久记忆 + 无限上下文

MedGPT&#xff1a;解决遗忘 永久记忆 无限上下文 问题&#xff1a;如何提升语言模型在长对话中的记忆和处理能力&#xff1f;子问题1&#xff1a;有限上下文窗口的限制子问题2&#xff1a;复杂文档处理的挑战子问题3&#xff1a;长期记忆的维护子问题4&#xff1a;即时信息检…

javaEE - 20( 18000字 Tomcat 和 HTTP 协议入门 -1)

一&#xff1a; HTTP 协议 1.1. HTTP 是什么 HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议. HTTP 诞生与1991年. 目前已经发展为最主流使用的一种应用层协议. 最新的 HTTP 3 版本也正在完善中, 目前 Google / Facebook 等公司的产品已经支持了. HTT…

美赛结束后,还可以转学术论文发表!

美赛论文转学术论文 写在前面学术论文发表的意义论文发表指导 写在前面 2024年美赛已经顺利结束了&#xff0c;美赛虽然画上了句号&#xff0c;但大家的科研竞赛之路才刚刚开始。 大家都在赛事中完成了一份具有发表基础的文章&#xff0c;想要这篇文章价值最大化&#xff0c;…

2.8作业

程序代码&#xff1a; CCgcc EXEhello OBJS$(patsubst %.c,%.o,$(wildcard *.c)) CFLAGS-c -oall:$(EXE)$(EXE):$(OBJS)$(CC) $^ -o $%.o:%.c$(CC) $(CFLAGS) $ $^.PHONY:cleanclean:rm $(OBJS) $(EXE) 程序代码&#xff1a; #include<stdio.h> #include<string.h&…

机器学习--K-近邻算法常见的几种距离算法详解

文章目录 距离度量1 欧式距离(Euclidean Distance)2 曼哈顿距离(Manhattan Distance)3 切比雪夫距离 (Chebyshev Distance)4 闵可夫斯基距离(Minkowski Distance)5 标准化欧氏距离 (Standardized EuclideanDistance)6 余弦距离(Cosine Distance)7 汉明距离(Hamming Distance)【…

MySQL篇----第七篇

系列文章目录 文章目录 系列文章目录前言一、水平分区二、分库分表之后,id 主键如何处理三、存储过程(特定功能的 SQL 语句集)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你…

从零开始手写mmo游戏从框架到爆炸(七)— 消息封装

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 上一篇&#xff0c;我们初步把消息handler 注册到了服务中&#xff0c;在进行后续工作之前我们需要再做一些准备工作。 第一&#xff1a;把之前自己管理的bean放到spring中…

c++设计模式之装饰器模式

作用 为现有类增加功能 案例说明 class Car { public:virtual void show()0; };class Bmw:public Car { public:void show(){cout<<"宝马汽车>>"<<endl;} };class Audi:public Car { public:void show(){cout<<"奥迪汽车>>&q…

三、设计模式相关理论总结

一、面向对象编程 1.1 概述 简称Object Oriented Program(OOP)&#xff0c;指以类或对象作为基础组织单元&#xff0c;遵循封装、继承、多态以及抽象等特性&#xff0c;进行编程。其中面向对象不一定遵循封装、继承、封装和多态等特性&#xff0c;只是前人总结的套路规范&…

嵌入式学习之Linux入门篇笔记——10,Linux连接档概念

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 目录 1.Linux 下的连接档种类 2.什么是 inode&#xff1f; 3.什…

7、7 个适合初学者的项目,让您开始使用 ChatGPT

7 个适合初学者的项目,让您开始使用 ChatGPT 在当今世界释放人工智能的力量。 在技术以前所未有的速度发展的时代,人工智能?—?或朋友🤓的人工智能脱颖而出,成为最具变革性的力量之一。 从自动化日常任务到预测复杂模式,人工智能正在重塑行业并重新定义可能性。 当我…

Unity2D 学习笔记 0.Unity需要记住的常用知识

Unity2D 学习笔记 0.Unity需要记住的常用知识 前言调整Project SettingTilemap相关&#xff08;创建地图块&#xff09;C#脚本相关程序运行函数private void Awake()void Start()void Update() Collider2D碰撞检测private void OnTriggerStay2D(Collider2D player)private void…

【Algorithms 4】算法(第4版)学习笔记 06 - 2.3 快速排序

文章目录 前言参考目录学习笔记1&#xff1a;基本算法1.1&#xff1a;快速排序 demo 演示1.2&#xff1a;快速排序切分代码实现1.3&#xff1a;实现细节1.4&#xff1a;案例分析1.4.1&#xff1a;最佳案例1.4.2&#xff1a;最坏案例1.4.3&#xff1a;平均案例分析1.5&#xff1…

【MySQL】学习和总结DCL的权限控制

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Bl9kYeLf8GfpdQgL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

消息队列MQ 介绍

&#x1f47d;System.out.println(“&#x1f44b;&#x1f3fc;嗨&#xff0c;大家好&#xff0c;我是代码不会敲的小符&#xff0c;双非大四&#xff0c;Java实习中…”); &#x1f4da;System.out.println(“&#x1f388;如果文章中有错误的地方&#xff0c;恳请大家指正&a…

Renitialized existing Git repositoy in D:/libai/project/gitab-cicd-test/.git/

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

vue 引入 百度地图API 和 路书

公司项目中&#xff0c;偶尔都会涉及到地图的使用&#xff0c;这里以百度地图为例&#xff0c;我们梳理一下引用流程及注意点 账号和获取密钥 百度地图示例 百度地图 类参考 1、账号和获取密钥 // api.map.baidu.com/api?typewebgl&v3.0&ak您的密钥<script type…

1899_野火FreeRTOS教程阅读笔记_任务创建

1899_野火FreeRTOS教程阅读笔记_任务创建 全部学习汇总&#xff1a; g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 关于这部分&#xff0c;从一般前后台程序到RTOS的任务描述了很多。但是我觉得这本书的这部分描述没有描述到关键的信息点。其实&#xff0c;RTOS存在的一个主要的目…

机器学习系列——(十七)聚类

引言 在当今数据驱动的时代&#xff0c;机器学习已经成为了解锁数据潜能的关键技术之一。其中&#xff0c;聚类作为机器学习领域的一个重要分支&#xff0c;广泛应用于数据挖掘、模式识别、图像分析等多个领域。本文旨在深入探讨聚类技术的原理、类型及其应用&#xff0c;为读…

【Flink入门修炼】1-3 Flink WordCount 入门实现

本篇文章将带大家运行 Flink 最简单的程序 WordCount。先实践后理论&#xff0c;对其基本输入输出、编程代码有初步了解&#xff0c;后续篇章再对 Flink 的各种概念和架构进行介绍。 下面将从创建项目开始&#xff0c;介绍如何创建出一个 Flink 项目&#xff1b;然后从 DataStr…