目录

一、涉及到的知识点

1.List泛型集合

2.List泛型集合的Add方法

3.List泛型集合的ToArray方法

4.string.Join()方法

5.Array.Sort(int[] array)方法

6.HashSet 泛型集合

二、实例

1.源码 

2.生成效果


一、涉及到的知识点

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#去掉值数组中重复元素:使用泛型List<T>集合 vs 使用泛型HashSet<T>集合-LMLPHP

02-23 10:32