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.