1

Тема: Видалення дублікату в масиві

В масиві потрібно знайти та видалити подібні елементи, які я введу з клавіатури.
Зробив, але чомусь виводе половину нашого масиву.
Можете виправити та пояснити чому так?)
Дякую)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UnicMas1
{
    class Program
    {
        static void Main(string[] args)
        {

            int[] mass = new int[10];
            Console.WriteLine("Введите 10 символов: ");

            for (int b = 0; b < 10; b++)
            {
                mass[b] = Convert.ToInt32(Console.ReadLine());
            }

            Console.WriteLine("\nВаш масив ");

            for (int a = 0; a < 10; a++)
            {
                Console.Write(mass[a] + " ");
            }

            for (int i = 0; i < mass.Length - 1; ++i)
            {
                for (int g = 0; g < mass.Length - 1; ++g)
                {
                    if (mass[i] == mass[g])
                    {
                        int f = mass[mass.Length - 1];
                        mass[mass.Length - 1] = mass[g];
                        mass[g] = f;
                        Array.Resize(ref mass, mass.Length - 1);

                    }
                }
            }
            Console.WriteLine("\nLength " + mass.Length);
            Console.WriteLine("\nВаш уникальный масив ");

            for (int a = 0; a < mass.Length; ++a)
            {
                Console.Write(mass[a] + " ");
            }

            Console.ReadKey();

        }
    }
}

2 Востаннє редагувалося koala (20.02.2018 13:53:24)

Re: Видалення дублікату в масиві

По-перше, ви чомусь міняєте місцями елементи, хоча один з них слід просто викинути, його не треба переписувати в кінець.
По-друге, ви в циклі по масиву (навіть у двох циклах) змінюєте цей масив. А це майже завжди погана ідея. Якщо не хочете плутатися - краще формуйте новий масив унікальних значень. Наступні дві проблеми - наслідки цієї.
По-третє, змінні g та i проходять весь масив двічі: перший раз mass[ i ] та mass[g] порівнюються при g<i, а другий - при g>i (не кажу вже за g==i, де вони гарантовано рівні). Може, варто брати for(int g=i+1;...) ?
По-четверте, коли ви зменшуєте масив, виходить, що mass[g], яке набуло значення колишнього останнього елементу, ні з чим не порівнюється, бо g одразу збільшується.

Подякували: slusarj231

3

Re: Видалення дублікату в масиві

І існує цілий HashSet для цього, до речі.

Подякували: slusarj231

4 Востаннє редагувалося slusarj23 (20.02.2018 16:14:47)

Re: Видалення дублікату в масиві

Виправив початкове значення і все запрацювало!

for (int g = i+1; g < mass.Length - 1; ++g)

5

Re: Видалення дублікату в масиві

Можете готовий код викласти? Бо мені здається, цього буде замало. Спробуйте всі однакові значення ввести.