谁能帮助我完成此任务或说明如何做?

时间:2019-01-19 21:32:08

标签: c# arrays

我在分配作业时遇到麻烦。有人可以帮我解释一下我该怎么做吗?

这是作业:编写一个程序,该程序将出现多次的元素的有序数组缩短,以删除重复项,因此最终每个元素仅出现一次。 我们不使用排序,也不会生成新的数组。

我尝试了很多次,填充数组没问题,但是剩下的就是

这是我的一些作品:

        //aanmaken en vullen van de array
        int[] getallen = new int[] { 1, 1, 2, 2, 3, 4, 4, 4, 5, 6 };

        //in volgende loop geven we de getallen weer uit de originele array
        for (int teller = 0; teller < 10; teller++)
        {
            Console.Write(getallen[teller] + " ");
        }
        Console.Write("==> ");
        Console.Write(getallen[0] + " ");

        //in volgende loop geven we enkel de unieke getallen uit de array 
        weer
        for (int teller = 1; teller < 10; teller++)
        {
            if (getallen[teller] != getallen[teller - 1])
            {
                Console.Write(getallen[teller] + " ");

            }
            Console.ReadLine();

因此应该是:输入:int [] getallen = new int [] {1,1,2,2,3,4,4,4,5,6};输出:{1,2,3,4,5,6}

2 个答案:

答案 0 :(得分:1)

要生成{1,2,3,4,5,6}作为结果(即删除重复的相邻条目),请考虑以下方法:

using System;
using System.Collections.Generic;

namespace Test
{
    public class Program
    {
        public static IEnumerable<int> RemoveDuplicates(int[] input)
        {
            int? old = null;

            foreach (var value in input)
            {
                if (value != old)
                    yield return value;

                old = value;
            }
        }

        public static void Main()
        {
            int[] getallen = new int[] { 1, 1, 2, 2, 3, 4, 4, 4, 5, 6 };
            Console.WriteLine(string.Join(",", RemoveDuplicates(getallen)));

            Console.ReadLine();
        }
    }
}

IEnumerable<int>不使用数组就返回值,而yield return用于一次返回一个非重复项。

valueold进行比较,以确保忽略重复的相邻条目。

string.Join用于将值与它们之间的,串联在一起,因此它们在控制台上的打印效果很好。

从性能角度考虑,将old声明更改为int old = (input?.FirstOrDefault() ?? 1) + 1;也可能会有所帮助,以便不涉及可空类型。为了清晰起见,我更喜欢将其保留为可为null的类型。)

答案 1 :(得分:1)

public void ShortenArray()
{
    int[] getallen = new int[] { 1 , 1 , 2 , 2 , 3 , 4 , 4 , 4 , 5 , 6 };
    getallen = getallen.ToList().Distinct().ToArray();
}

说明:

Linq-List提供了方法Distinct()。此方法删除重复项,但保持顺序。此外,Linq使您能够将数组转换为列表,反之亦然。

一种替代方法是检查数组中的每一项是否已经设置过,以新的方式替换各项,以确保所有“空”值都在末尾并使用* Array.Resize( / ** /)*方法来缩短数组。要获得相同的结果,还有很多工作要做。