C#使用泛型实现删除数组中重复元素
一、涉及到的知识点
1.List<T>泛型集合
List<T>泛型集合表示可通过索引访问的对象的强类型列表,提供了用于对列表进行搜索、排序和操作的方法。List<T>泛型集合位于System.Collections.Generic命名空间下。
2.List<T>泛型集合的Add方法
List<T>泛型集合的Add方法用于将对象添加到List<T>的结尾处。语法格式如下:
public void Add(T item)
参数说明
item:要添加到List<T>的末尾处的对象。对于引用类型,该值可以为null。
3.List<T>泛型集合的ToArray方法
List<T>泛型集合的ToArray方法用于将List<T>的元素复制到新数组中。语法格式如下:
public virtual void Add(Object key,Object value)
参数说明返回值:一个数组,它包含List<T>的元素的副本。
4.string.Join()方法
这种方法简洁、适用。用于代替foreach遍历输出,没治了。
int[] int_arrays = [38, 98, 368, 98, 698, 2998, 368, 5998]; textBox1!.Text = string.Join(", ", int_arrays);
5.Array.Sort(int[] array)方法
该方法对值类型数组进行排序,并修改源数组。该方法并不生成新的数组,如果需要生成新数组,则定义一个新数组,拷贝数组到新数组,然后对新数组进行排序。
int[] int_arrays = [38, 98, 368, 98, 698, 2998, 368, 5998]; textBox1!.Text = string.Join(", ", int_arrays); Array.Sort(int_arrays); //对值数组排序 textBox2!.Text = string.Join(", ", int_arrays);
// 使用 Array.Sort() 方法对数组进行排序 namespace _130_2 { public class Program { public static void Main(string[] args) { ArgumentNullException.ThrowIfNull(args); int[] intArray = { 38, 98, 368, 98, 698, 2998, 368, 5998 }; Array.Sort(intArray); Console.WriteLine("排序后的数组:"); foreach (int num in intArray) { Console.WriteLine(num); } } } } //运行结果 /* 排序后的数组: 38 98 98 368 368 698 2998 5998 */
6.HashSet<T> 泛型集合
使用泛型集合 HashSet<T> 来删除数组中的重复数字。HashSet<T> 集合用于存储唯一的元素,如果尝试添加重复元素,它将自动忽略重复项。
// 使用 HashSet<T> 去除数组中的重复数字 namespace _130_1 { public class Program { public static void Main(string[] args) { ArgumentNullException.ThrowIfNull(args); int[] numbers = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9]; HashSet<int> uniqueNumbers = [.. numbers]; Console.WriteLine("去除重复数字后的数组:"); foreach (int number in uniqueNumbers) { Console.WriteLine(number); } } } } //运行结果: /* 去除重复数字后的数组: 1 2 3 4 5 6 7 8 9 */
示例首先创建一个包含重复数字的数组。然后,创建一个 HashSet<int> 集合来存储唯一的数字。接下来,使用 foreach 循环遍历原始数组,并将每个数字添加到 HashSet<int> 集合中。由于 HashSet<int> 集合只存储唯一的元素,重复的数字将被自动忽略。最后,我们使用另一个 foreach 循环打印去除重复数字后的结果。
二、实例
使用泛型去掉了数组中的重复数字,具体实现时,首先需要对数组进行排序,排序之后重复的数字肯定是相邻的,这时只需要比较邻近的数字是否相同即可。
1.源码
// 使用泛型去掉数组中的重复数字 namespace _130 { public partial class Form1 : Form { private Label? label1; private Label? label2; private Label? label3; private static TextBox? textBox1; private static TextBox? textBox2; private static TextBox? textBox3; 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, 16), Name = "label1", Size = new Size(56, 17), TabIndex = 0, Text = "源数组:" }; // // label2 // label2 = new Label { AutoSize = true, Location = new Point(12, 45), Name = "label2", Size = new Size(56, 17), TabIndex = 1, Text = "排序后:" }; // // textBox1 // textBox1 = new TextBox { Location = new Point(61, 10), Name = "textBox1", Size = new Size(240, 23), TabIndex = 2 }; // // textBox2 // textBox2 = new TextBox { Location = new Point(61, 39), Name = "textBox2", Size = new Size(240, 23), TabIndex = 3 }; // // label3 // label3 = new Label { AutoSize = true, Location = new Point(12, 74), Name = "label3", Size = new Size(56, 17), TabIndex = 4, Text = "新数组:" }; // // textBox3 // textBox3 = new TextBox { Location = new Point(61, 68), Name = "textBox3", Size = new Size(240, 23), TabIndex = 5 }; // // Form1 // AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(314, 98); Controls.Add(textBox2); Controls.Add(textBox1); Controls.Add(label2); Controls.Add(label1); Controls.Add(textBox3); Controls.Add(label3); Name = "Form1"; Text = "使用泛型去掉数组中的重复数字"; ResumeLayout(false); PerformLayout(); MainMethod(); } /// <summary> /// 定义一维源数组 /// 并对其排序 /// </summary> static void MainMethod() { int[] int_arrays = [38, 98, 368, 98, 698, 2998, 368, 5998]; textBox1!.Text = string.Join(", ", int_arrays); Array.Sort(int_arrays); //对值数组排序 textBox2!.Text = string.Join(", ", int_arrays); int[] newArrays = RemoveNum(int_arrays);//调用方法去掉重复数字 textBox3!.Text = string.Join(", ", newArrays); } #region 去掉数组中的重复数字 /// <summary> /// 去掉数组中的重复数字 /// </summary> /// <param name="int_Data">要去除重复数字的int数组</param> /// <returns>取出重复数字之后的数组</returns> static int[] RemoveNum(int[] int_Data) { List<int> list_Arrays = []; //实例化泛型集合 for (int i = 0; i < int_Data.Length - 1; i++) //循环访问源数组元素 { if (int_Data[i] != int_Data[i + 1]) //判断相邻的值是否相同 { list_Arrays.Add(int_Data[i]); //如果不同,将值添加到泛型集合中 } } list_Arrays.Add(int_Data[^1]); //将数组的最后一个元素添加到泛型集合中 return [.. list_Arrays]; //将泛型集合转换为数组,并返回 } #endregion } }
本实例实现时主要用到了List<T>泛型集合及其Add方法、ToArray方法。
2.生成效果
到此这篇关于C#使用泛型实现删除数组中重复元素的文章就介绍到这了,更多相关C#删除数组重复元素内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C# CefSharp 根据输入日期段自动选择日期的操作代码
这篇文章主要介绍了C# CefSharp 根据输入日期段自动选择日期的操作代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2024-01-01解析OpenXml Pptx的边框虚线转为WPF的边框虚线问题
这篇文章主要介绍了OpenXml Pptx的边框虚线转为WPF的边框虚线,在文中用PPTX的7种直线,分别设置7种能够设置的虚线类型,具体实例代码跟随小编一起看看吧2021-12-12
最新评论