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));
}
}
}
Още едно решение, след като взех вече и речниците. Мисля, че работи и съм щастлива за което. :)
Установих, че с използването на речник много лесно можеш да разбереш кои елементи по колко пъти се съдържат в даде масив/лист. Ако се изисква да принтираш елементите, които се съдържат два пъти, просто речника се филтрира по 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));
}
}
}