c#中数组重复删除

本文关键字:删除 数组 | 更新日期: 2023-09-27 17:50:54

这是我的代码,到目前为止,我已经在用户输入时显示了数组中的所有项目,并为重复的数字创建了一个错误消息,删除重复的数字并继续循环。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace midterm
{
    class Program
    {
        static void Main(string[] args)
        {
            int size;
            Console.WriteLine("How many numbers will you enter?");
            size = Convert.ToInt32(Console.ReadLine());
            int[] numbers = new int[size];
            int i;
            for (i = 0; i < size; i++)
            {
                Console.WriteLine("Enter number: ");
                numbers[i] = Convert.ToInt32(Console.ReadLine());
            }
            for (i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    if (i != j)
                    {
                        if (numbers[j] == numbers[i])
                        {
                            int k = j;
                            while (k < size - 1)
                            {
                                numbers[k] = numbers[k + 1];
                                k++;
                            }
                            size--;
                        }
                    }
                }
            }
            Console.WriteLine("Duplicate Removed:");
            for (i = 0; i < size; i++)
            {
                Console.WriteLine(numbers[i]);
            }
            Console.ReadLine();
        }
    }
}

每次我修改for循环或者添加错误信息时,程序就会停止删除重复的语句,我真的被这个难住了,有人能帮我一下吗

c#中数组重复删除

看看LINQ,它有一些很棒的函数可以用于集合操作。如果是你的情况,我会这样做:

Distinct()在这里只过滤数组的唯一值。

int[] initialArray = new int[] { 1, 1, 2, 3, 4, 5 };
int[] noDuplicates = initialArray.Distinct().ToArray(); // [1,2,3,4,5]

我建议使用List而不是arrayList将允许您在不指定大小的情况下不断添加条目。

使用列表,您可以在添加条目之前检查条目是否已经存在,因此您不必使用removedelete

简单的方法,使用HashSet

    HashSet<int> mySet = new HashSet<int>();
    //... 
    for (i = 0; i < size; i++)
    {
        Console.WriteLine("Enter number: ");
        int number = Convert.ToInt32(Console.ReadLine());
        if (!mySet.Add(number)) 
        {
             Console.WriteLine("That was a duplicate. Try again");
             i--;
        }
    }

如果必须使用数组:

    for (i = 0; i < size; i++)
    {
        Console.WriteLine("Enter number: ");
        int numbers = Convert.ToInt32(Console.ReadLine());
        if (ExistsInArray(number, numbers)) 
        {
             Console.WriteLine("That was a duplicate. Try again");
             i--;
        }
        else 
        {
            numbers[i] = number;
        }
    }

然后:

 private static bool ExistsInArray(number, numbers)
 {
     // Your code to search numbers for number and return true if found
     // Left as an exercise for the OP
 }

这里需要注意的一点是,检查数组是否已经包含要添加的元素要比在添加元素之后删除它容易得多。如果它已经存在,就不要再添加它。