Diskuze: Najviac opakovaná položka v Liste

C# .NET .NET (C# a Visual Basic) Najviac opakovaná položka v Liste American English version English version

Avatar
roks
Člen
Avatar
roks:

Zdravím, vedel by mi niekto poradiť, ako spraviť, alebo aký príkaz je na to, keď chcem zistiť, aká položka sa najviac vyskytuje v Liste?

 
Odpovědět 8.9.2013 12:15
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

Na všechno není příkaz, někdy se musí zapojit mozek :P Musíš si někam ukládat počet položek.

Nahoru Odpovědět 8.9.2013 12:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Theodor Johnson
Redaktor
Avatar
Nahoru Odpovědět 8.9.2013 12:31
Přecházím na "Cross-Platform Development"
Avatar
roks
Člen
Avatar
Odpovídá na David Čápka
roks:

Ale došli mi nápady, lebo potrebujem, aby mi ukázalo najviac nájdený pixel v bitmape...

 
Nahoru Odpovědět 8.9.2013 12:32
Avatar
Gelidus
Člen
Avatar
Gelidus:

Čo spraviť miesto Listu Dictionary s keyom - hashu tej farby (int) a value -počtom?

 
Nahoru Odpovědět 8.9.2013 12:41
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na roks
Jan Vargovský:

Histogram nebo přímo jednotlivých barev?

 
Nahoru Odpovědět  +1 8.9.2013 12:50
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

To ukládáš každý pixel do listu? To snad ne. Lepší by bylo kdybys napsal co chceš vůbec udělat.

Nahoru Odpovědět 8.9.2013 12:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

To sis ještě nezvykl, že se místo pole často chybně používá seznam a naopak?

Nahoru Odpovědět 8.9.2013 13:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Tohle je spíš na slovník, kde jsou klíčem barvy a hodnotou počet pixelů.

Nahoru Odpovědět 8.9.2013 13:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

To je fakt, barev je v TrueColor víc než pixelů na obrazovce.

Nahoru Odpovědět 8.9.2013 13:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
roks
Člen
Avatar
Odpovídá na David Čápka
roks:

Ukladám každý pixel do listu, pretože potrebujem, aby pixel, ktorý sa najviac vyskytuje v Bitmap-e bol priehľadný :)

 
Nahoru Odpovědět 8.9.2013 13:27
Avatar
roks
Člen
Avatar
Odpovídá na Jan Vargovský
roks:

Priamo jednotlivých farieb, resp. pixelov

 
Nahoru Odpovědět 8.9.2013 13:28
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

Aha, takže ke zprůhlednění jedné barvy uložíš milion položek do listu. Zajímavé. Jak jsem psal výše, použiješ Dictionary, ne list.

Nahoru Odpovědět 8.9.2013 13:29
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

Kdybys nevěděl jak se s ním zachází, je to popsané detailně tady: http://www.itnetwork.cz/…ziny-hashset

Nahoru Odpovědět 8.9.2013 13:29
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
roks
Člen
Avatar
Odpovídá na David Čápka
roks:

Aha, ale pokiaľ som tomu správne pochopil, keď vložím do množiny nejaký prvok aj viackrát, uloží ho len raz. Ale potom ako zistím, ktorý prvok sa vyskytuje najviac?

 
Nahoru Odpovědět 8.9.2013 13:48
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

Ne do množiny, do slovníku. Ty jsi to nečetl.

Nahoru Odpovědět 8.9.2013 13:49
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
roks
Člen
Avatar
Odpovídá na David Čápka
roks:

Čítal, ale (keďže nemám toľko vedomostí ako ostatný na tejto stránke) neviem si predstaviť, ako by to fungovalo. :(

 
Nahoru Odpovědět  -1 8.9.2013 14:07
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

Uděláš si dictionary. S každým pixelem obrázku vezmeš jeho barvu a podíváš se, jestli je ten klíč ve slovníku. Pokud tam není, vložíš pod tuto barvu hodnotu 1. Pokud tam je, přičteš jedna k té hodnotě. Po projetí obrázku budeš mít ve slovníku barvy obrázku a pod každou počet pixelů. Stačí pak vybrat ten nejvyšší.

Nahoru Odpovědět 8.9.2013 14:33
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
roks
Člen
Avatar
Odpovídá na David Čápka
roks:

Aha vďaka, ale ešte jeden dotaz. Vytvorím si
Dictionary<Color, int> farba = new Dictionary<Color, int>(); // Color bude kľúč ak správne chápem a int bude udávať, koľko pixelov je tej určitej farby. Potom teda kód bude vyzerať takto:

for (int y = 1; y < bitmap.Height; y++)
                for (int x = 0; x < bitmap.Width; x++)
                {
                    Color clr = bitmap.GetPixel(x, y);
                    if (farba.ContainsKey(clr))
                    {
                        ???
                    }
                    else
                    {
                        farba.Add(clr, 1);
                    }
                }

Ale neviem ako budem upravovať int na vyšší :(

 
Nahoru Odpovědět 8.9.2013 15:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

Ano, pochopil jsi to dobře. Mělo by to jít jen takhle:

farba[clr]++;

Kolekce bys měl pojmenovávat vždy množným čísle, ne tedy farba, ale farby. Barva v té proměnné přeci není. Mohlo by se to jmenovat třeba pocetPixelu.

Editováno 8.9.2013 15:33
Nahoru Odpovědět 8.9.2013 15:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 8.9.2013 15:33
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na David Čápka
Jan Vargovský:

Zrovna nato čumím no, odesílalo se to tak 5 sekund, jinak bych byl rychlejší já :D

 
Nahoru Odpovědět 8.9.2013 15:34
Avatar
roks
Člen
Avatar
roks:

Nebudem dávať odpoveď, vďaka obom za pohotovú odpoveď :) a už len priehľadnú farbu zvolím:
Color priehladnaFarba = farby.Keys.Max(); ? :)

 
Nahoru Odpovědět 8.9.2013 15:49
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na roks
Jan Vargovský:

Ano. Však si to zkus, nemusíš se ptát na všechno :)

Pozn. Proč ignoruješ levý sloupec pixelů ? (začínáš s y = 1)

Editováno 8.9.2013 15:54
 
Nahoru Odpovědět 8.9.2013 15:52
Avatar
roks
Člen
Avatar
roks:

Ide o to, že som to skúsil a nejde mi to :/

Color priehladnaFarba = farby.Keys.Max();

píše mi toto: "At least one object must implement IComparable."

 
Nahoru Odpovědět 8.9.2013 15:57
Avatar
roks
Člen
Avatar
Odpovídá na Jan Vargovský
roks:

Lebo keď dám y = 0, tak pixel 0, 0 mi hneď vyhodí chybu :)

 
Nahoru Odpovědět 8.9.2013 16:02
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

Protože klíče jsou barvy. Ty hledáš hodnotu. Snažíš se tedy najít maximální barvu, což jaksi nejde. Můžeš použít mocné metody LINQu:

Color priehladnaFarba = farby.MaxBy(kvp => kvp.Value).Key;

Nebo si to prostě projet cyklem. Dalo by se i najít maximální hodnotu a potom klíč té hodnoty, ale to zbytečně projíždí kolekci 2x.

Nahoru Odpovědět 8.9.2013 16:21
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na roks
Jan Vargovský:

Jo, potřebuješ vlastně maximum Value, tak buď si seřadíš ten slovník pomocí value (LINQ) a vezmeš si první pár a z něho klíč a nebo použiješ to co máš teď a jen vyhledáš barvu, která se schoduje s tvým klíčem.

Color color = farby.OrderByDescending( d => d.Value).First().Key;

Každopádně řekni co ti to hází za vyjímku, normalně by jsi měl být schopný brát i pixel [0,0]

David Čápka to už snad děláš naschvál ne?:D

Editováno 8.9.2013 16:25
 
Nahoru Odpovědět 8.9.2013 16:22
Avatar
roks
Člen
Avatar
roks:

Aha, tak to ma nenapadlo :) tak Vám ďakujem za ochotu :)

 
Nahoru Odpovědět 8.9.2013 16:29
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na roks
David Čápka:

Nemáš zač, když se budeš snažit a pošleš nějaký kód, tak ti tu vždycky někdo rád pomůže. Nemáme ale rádi, když máme někomu něco celé programovat :)

Nahoru Odpovědět  +1 8.9.2013 16:44
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 31 zpráv z 31.