Diskuze: Poradit
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Tak už jsem to vylepšil, jako kdybych sem nic nepsal.
chart1.Series.Clear();
chart1.Series.Add("KolikCisel");
chart1.Series["KolikCisel"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
chart1.Series["KolikCisel"].IsValueShownAsLabel = true;
List<int> Cisla = new List<int>();
Random r = new Random();
for (int i = 0; i < 9000; i++)
{
int temp = r.Next(0, 9);
Cisla.Add(temp);
}
for (int i = 0; i < 9; i++)
{
int PocetElementu = (new Func<int>(() =>
{
return (from cislo in Cisla where cislo == i select cislo).Count<int>();
}))();
chart1.Series["KolikCisel"].Points.AddY(PocetElementu);
}
pouzij GroupBy https://msdn.microsoft.com/…b545971.aspx
to ti zkrati kod na polovinu.
ještě příklad 
int[] test = {1,2,3,4,2,1,6,5,1};
int res = (from i in test
where i == 1
select i).Count();
Console.WriteLine(res); // Vypíše 3
Mě to ráno vůbec něják nedošlo, že ten select můžu zavřít do
závorky a použít metodu count rovnou na něm 
Tohle je zatím nejlepší, co mne napadlo
bez groupBy, co doporučoval kolega
nahoře:
int[] test = {1,2,3,4,2,1,6,5,1};
var result = new Dictionary<int, int>();
foreach (int element in test.Distinct())
{
result[element] = test.Count(i => i==element);
}
výsledek dostaneš pěkně do slovníku, kde klíče jsou jednotlivá
čísla. Předpokládám, že groupby by udělalo totéž 
Také jsem zjistil, že where z předchozího můžu vynechat
To je moc pěkný řešení
. Takové jednoduché funkční,tak to má být..
To se mi líbí na c#, jak je možný vzít "úkol" co chci napsat a ted
existuje strašně moc způsobů, jak toho řešení dosáhnout.
a třeba i potom by zase se to řešení ukázalo jako nevhodně, při další práci s ním, třeba Dictonary elegatně natlačit do toho grafu atd.
Díky, ale teď to ještě natlačit na jeden řádek
Mně se to zatím moc nelíbí 
Zatím můj nejlepší pokus (alespoň co se týče délky
. Bohužel není výsledek
slovník,
jen dvojice klíč a hodnota.
int[] test = {1,2,3,4,2,1,6,5,1};
var pokus = test.GroupBy(i => i).Select(i => new {key = i.First(), value = i.Count()});
//vypis
foreach (var elem in pokus)
{
Console.WriteLine("Klíč: {0} Hodnota: {1}", elem.key, elem.value);
}
Odvolávám a snad už naposledy, tohle je zatím nejlepší co se délky
týče. 
A opravdu vytvoří slovník.
int[] test = {1,2,3,4,2,1,6,5,1};
Dictionary<int, int> pokus2 = test.GroupBy(i=>i).ToDictionary(key => key.First(), value => value.Count());
Pěkný
Já jsem do toho
Groupby moc zatím nepronikl a tak ho spíše asi obcházím..Je to moc pěknej
zápis, neznal jsem ani metodu na array to ToDictonary, popravdě docela i
koukám, že to funguje jak má 
GroupBy vytvoří výčet podmnožin podle zadaného kritéria.
Zde:
{1,1,1}
{2,2}
{3}
atd
Ten pak procházím a vytvořím klíč z prvního prvku(v podmnožině jsou jen stejné prvky) a hodnotu z počtu prvků dané podmnožiny.
ToDictionary tuším patří do LINQ, takže ho můžeš používat nejen na pole.
Bylo to zajímavé zadání, takové je radost řešit. Díky za něj 
Jen bych si nedělal velké iluze o rychlosti toho řešení.
Zobrazeno 14 zpráv z 14.