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

news2024/11/15 11:15:28

目录

一、使用的方法

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];  //前移Len
            for (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];//为遍历到的索引元素赋值
                else
                    temArray[i] = ArrayBorn[i];         //为遍历到的索引元素赋值
            }
            return temArray;                            //返回得到的新数组
        }
    }
}

2.生成效果 

 

 

 

 

 

 

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

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

相关文章

ownips的自救指南:一次账号封停事件的心路历程与解决策略

前言 小明以前是全球500强电商类公司的运营工作人员&#xff0c;在事业的上升期日入斗金、年薪百万&#xff0c;后面分钱时被产品、总监、老板瓜分了大头&#xff0c;大气都大敢出。由于小明掌握了核心技术&#xff0c;从联系品牌供应商、电商选品、用户行为调研、用户画像收集…

详解Redis哨兵模式下,主节点掉线而重新选取主节点的流程

⭐最核心的结论&#xff1a;所谓选举的过程不是直接选出新的主节点&#xff0c;而是先在哨兵节点中选出 leader &#xff0c;再由 leader 负责后续主节点的指定。 假定当前环境&#xff1a; 三个哨兵(sentenal1, sentenal2, sentenal3)一个主节点(redis-master)两个从节点(red…

Unity类银河恶魔城学习记录5-1.5-2 P62-63 Creating Player Manager and Skill Manager源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerManager.cs using System.Collections; using System.Collections.G…

Bpmn-js自定义Palette元素

Bpmn-js作为一个流程编辑器&#xff0c;常规的我们可以将其划分为几个功能区域&#xff0c;每个区域对应的负责不同的功能实现&#xff0c;bpmn-js的设计给我们留下了大量的留白和可扩展区域&#xff0c;其每一部分都可进行组合拼装&#xff0c;同时也支持我们的各种不同层次需…

DevOps落地笔记-20|软件质量:决定系统成功的关键

上一课时介绍通过提高工程效率来提高价值交付效率&#xff0c;从而提高企业对市场的响应速度。在提高响应速度的同时&#xff0c;也不能降低软件的质量&#xff0c;这就是所谓的“保质保量”。具备高质量软件&#xff0c;高效率的企业走得更快更远。相反&#xff0c;低劣的软件…

【CV论文精读】【MVDet】Multiview Detection with Feature Perspective Transformation

0.论文摘要 合并多个摄像机视图进行检测减轻了拥挤场景中遮挡的影响。在多视图检测系统中&#xff0c;我们需要回答两个重要问题。首先&#xff0c;我们应该如何从多个视图中聚合线索&#xff1f;第二&#xff0c;我们应该如何从空间上相邻的位置聚集信息&#xff1f;为了解决…

自定义搜狗输入法日期时间格式设置

目录 引言具体操作方法1方法2 效果展示 引言 根据搜狗官方指导&#xff1a;https://pinyin.sogou.com/help.php?list3&q11 【插入当前日期时间】的功能可以方便的输入当前的系统日期、时间、星期。并且你还可以用插入函数自己构造动态的时间。例如在回信的模版中使用。此…

Pandas 数据处理-排序与排名的深度探索【第69篇—python:文本数据处理】

文章目录 Pandas 数据处理-排序与排名的深度探索1. sort_index方法2. sort_values方法3. rank方法4. 多列排序5. 排名方法的参数详解6. 处理重复值7. 对索引进行排名8. 多级索引排序与排名9. 更高级的排序自定义10. 性能优化技巧10.1 使用nsmallest和nlargest10.2 使用sort_val…

io三个练习:

练习一&#xff1a; 使用 四种方式拷贝文件&#xff0c;并统计各自用时 1字节流的基本流&#xff1a;一次读写一个字节 2字节流的基本流&#xff1a;一次读写一个字节数组 3字节缓冲流&#xff1a;一次读写一个字节 4字节缓冲流&#xff1a;一次读写一个字节数组 public clas…

TCP的连接和断开详解

目录 1.TCP基础知识 1.1.TCP 头格式 1.2.TCP协议介绍 1.3.UDP协议介绍 1.4.TCP 和 UDP 区别 1.5.TCP 和 UDP 应用场景 1.6.计算机网络相关术语&#xff08;缩写&#xff09; 2.TCP 连接建立&#xff1a;三次握手 2.1.TCP 三次握手过程 2.2.三次握手原理 2.3.异常分析…

JavaScript 入门 完整版

目录 第一个知识点&#xff1a;引入js文件 内部引用: 外部引用: 第二个知识点&#xff1a;javascript的基本语法 定义变量&#xff1a; 条件控制(if - else if - else) 第三个知识点&#xff1a;javascript里的数据类型、运算符&#xff1a; 数字类型 字符串类型 布尔…

【蓝桥杯单片机记录】IO基础与LED控制

目录 一、IO基础 1.1 IAP15F2K61S2芯片原理图 1.2不同工作模式 二、新建工程的一些补充 2.1 keil中没有IAP15F2K61S2的头文件 解决&#xff1a;在isp软件中找到如下​编辑 2.2keil中的芯片选择 2.3推荐字体 三、sbit关键字 四、LED控制 4.1原理图 4.2不能直接通过IO…

【深度学习:掌握监督学习】掌握监督学习综合指南

【深度学习&#xff1a;掌握监督学习】掌握监督学习综合指南 监督学习的定义和简要说明监督学习在人工智能中的重要性和相关性概述什么是监督学习&#xff1f;基本概念主要组件&#xff1a;输入要素和目标标签 训练监督式学习模型监督学习算法的类型分类回归每个类别中的流行算…

洞察 Electric Capital 2023 年开发者报告,找准未来 Web3 开发趋势

作者&#xff1a;Electric Capital 编译&#xff1a;TinTinLand 原文链接&#xff1a;https://www.developerreport.com/developer-report 近期&#xff0c;Electric Capital 发布了 2023 年年度加密开发者报告&#xff0c;对 818k 开源存储库中的 4.85 亿次代码提交进行分析…

C#上位机与三菱PLC的通信04--MC协议之A-1E报文测试

到目前为止&#xff0c;还没有网上有哪个文章有我如此的报文分析&#xff0c;操作实例&#xff0c;一大批都是抄来抄去&#xff0c;没有截图&#xff0c;没有说明&#xff0c;没有实例&#xff0c;有卵用呀&#xff0c;仅以此文章献给最爱的粉丝&#xff0c;希望对各位大师有些…

vue教程-介绍与使用

vue介绍 介绍 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。 安装 最简单的例子就是&#xff0c;创建一个htm…

2024年【广东省安全员B证第四批(项目负责人)】考试及广东省安全员B证第四批(项目负责人)考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员B证第四批&#xff08;项目负责人&#xff09;考试考前必练&#xff01;安全生产模拟考试一点通每个月更新广东省安全员B证第四批&#xff08;项目负责人&#xff09;考试题题目及答案&#xff01;多做几…

代码随想录算法训练营第二十五天 |216.组合总和III,17.电话号码的字母组合(已补充)

剪枝操作讲解&#xff1a;&#xff08;已观看&#xff09; 带你学透回溯算法-组合问题的剪枝操作&#xff08;对应力扣题目&#xff1a;77.组合&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 216.组合总和III&#xff08;已观看&#xff09; 1、题目链接&#xf…

文件上传-Webshell

Webshell简介 webshell就是以aspphpjsp或者cgi等网页文件形式存在的一种命令执行环境&#xff0c;也可以将其称做为一种网页木马后门。 攻击者可通过这种网页后门获得网站服务器操作权限&#xff0c;控制网站服务器以进行上传下载文件、查看数据库、执行命令等… 什么是木马 …

设计模式2-对象池模式

对象池模式&#xff0c;Object Pool Pattern&#xff0c;当你的应用程序需要频繁创建和销毁某种资源&#xff08;比如数据库连接、线程、socket连接等&#xff09;时&#xff0c;Object Pool 设计模式就变得很有用。它通过预先创建一组对象并将它们保存在池中&#xff0c;以便在…