Loading...
Elena123456 avatar Elena123456 235 Точки

Print all unique elements in the array/list

Здравейте, днес попаднах на следната задача:

Print all unique elements in an array.

input:

1 2 3 4 5 5 5 6

output:

1 2 3 4 6

 

Запознах се с Distinct(), но с него принтирам само това "1 2 3 4 5 6". Има ли някакъв друг подобен метод, с които да кажа, че искам числата да се запишат в нов лист, но само ако не се повтарят, потретват и пр. в първоначалния лист? И разбира се кода да е разбираем за човек, който е на ниво Fundamental, защото всички решения, които прегледах досега в stackoverflow  бяха напълно неразбираеми. :)

Все пак мисля, че успях да измисля някакво решение само с Destinct плюс още един допълнителен for цикъл. Понеже нямам Judge за тази задача не съм сигурна дали не би се счупила програмата  с някой инпут. И вече установих, че при инпут 1 1 2 2 6, принтирам 2 6, вместо само 6.

using System;
using System.Collections.Generic;
using System.Linq;


namespace W3resourceArrayExe
{
    class MainClass
    {
        public static void Main(string[] args)
        {

            Console.Write("Input the number of elements to be stored in the first array: ");
            int input = int.Parse(Console.ReadLine());
            Console.WriteLine($"Input {input} elements in the array:");
            var firstList = new List<string>();

            for (int i = 0; i < input; i++)
            {

                Console.Write($"element-{i} : ");
                string num = Console.ReadLine();
                firstList.Add(num);
             }

            var newListDestinct = firstList.Distinct().ToList();
            for (int i = 0; i < newListDestinct.Count; i++)
            {
                int counter = -1;

                for (int k = 0; k < firstList.Count; k++)
                {
                    if (newListDestinct[i] == firstList[k])
                    {
                        counter++;
                    }
                    if (counter > 0)
                    {
                        newListDestinct.RemoveAt(i);
                        break;

                    }
                }
            }

            Console.WriteLine(string.Join(" ",newListDestinct));
        }
    }
}
 

 

Тагове:
0
Fundamentals Module 12/09/2020 01:52:23
Drakojan avatar Drakojan 13 Точки

Привет,

Проблемът е че модифицираш колекцията newListDestinct докато я циклиш. В момента, в който махнеш елемента примерно на индекс 4 елемента, който е бил на индекс 5 заема неговото място. Когато след това отидеш в поредната итерация на цикъла i вече ще е 5, а елемента който е бил на индекс 5 е вече на индекс 4 и по този начин го пропускаш. Може да се реши като коригираш стойността на i с "i--", в момента, в който модифицираш колекцията: 

                    if (counter > 1)
                    {
                        newListDestinct.RemoveAt(i);
                        i - - ;
                        break;

                    }

1
Elena123456 avatar Elena123456 235 Точки

Още едно решение, след като взех вече и речниците. Мисля, че работи и съм щастлива за което. :)

Установих, че с използването на речник много лесно можеш да разбереш кои елементи по колко пъти се съдържат в даде масив/лист. Ако се изисква  да принтираш елементите, които се съдържат два пъти, просто речника се филтрира по x.Value==2. Ако се искат тези, които се съдържат три пъти, се филтрира по x.Value==3 и пр.

Хубав неделен ден от мен! :)

using System;
using System.Collections.Generic;
using System.Linq;

namespace Dictionary
{
    class MainClass
    {
        public static void Main()
        {
            int[] numbers = Console.ReadLine().Split().Select(int.Parse).ToArray();

            Dictionary<int, int> dictionary = new Dictionary<int, int>();

            for (int i = 0; i <= numbers.Length-1; i++)
            {
                if (dictionary.ContainsKey(numbers[i]) == false)
                {
                    dictionary[numbers[i]] = 1;
                }

                else
                {
                    dictionary[numbers[i]]++;
                }
            }

          var filteredDict = dictionary.Where(x => x.Value == 1).ToDictionary(x=> x.Key, x=> x.Value);
          Console.WriteLine(string.Join(" ", filteredDict.Keys));
        }

      }

    }

 


   
 

 

 

0
25/10/2020 12:29:51
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.