Poznáváme C# a Microsoft.NET – 12. díl

Diskuze čtenářů k článku

Tomixon  |  17. 01. 2008 10:22

Array.BinarySearch - když nenajde, vrací zápornou hodnotu. Pole musí být předtím seřazeno Array.Sort, jinak vrací blbosti.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
24. 11. 2007 13:06

Programovou oflline verzi seriálu naleznete ke stažení na http://poznavame-c-msnet.wz.cz/

Souhlasím  |  Nesouhlasím  |  Odpovědět
ondra  |  25. 02. 2005 08:42

int[] druhePole = new int[5];
druhePole = (int[])prvniPole.Clone();

Neni první řádek kódu zbytečný, když se hned na následujícím řádku do proměnné druhePole přiřadí instance objektu vrácená metodou Clone?
A pak by mě ještě zajímala rychlost cyklu foreach v porovnání s for a indexem, je stejně rychlý nebo jsou případy kdy je pomalejší?

Ondra

Souhlasím  |  Nesouhlasím  |  Odpovědět
Benjamin  |  25. 02. 2005 09:35

Ten prvni radek urcite zbytecny je.
Co se tyce rychlosti for a foreach - ze vseho nejvic je to dost jedno.

Souhlasím  |  Nesouhlasím  |  Odpovědět
ondra  |  25. 02. 2005 10:10

"Co se tyce rychlosti for a foreach - ze vseho nejvic je to dost jedno."

To má znamenat že jsou co do rychlosti stejný, nebo že se tim nezabýváš?

Ondra

Souhlasím  |  Nesouhlasím  |  Odpovědět
Benjamin  |  25. 02. 2005 10:55

V tomhle pripade to skutecne vyjde nastejno, nicmene i kdyby to uplne nastejno nevyslo, stejne bych se tim nezabyval - myslim si, ze v soucasne dobe ma smysl zabyvat se efektivitou na urovni navrhu a pouzitych algoritmu (napriklad urcite hraje roli, jestli tisiciprvkove pole behem nejakeho zpracovani prochazim petkrat nebo padesatkrat) a na takhle nizkou uroven proste nebrat velke ohledy.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zerryk  |  25. 02. 2005 11:38

Foreach je jen "krycí manévr", po kompilaci a dekompilaci (třeba Reflectorem http://www.aisto.com/roeder/dotnet/ ) je vidět že se ve výsledném kódu objeví buď klasický cyklus for s indexem, nebo nějaké volání metody MoveNext nějakého enumerátoru.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jan  |  25. 02. 2005 12:59

Foreach je hlavne syntakticky cukr...

Foreach se pouziva k iteraci pres kolekce/pole, ktere implementuji rozhrani IEnumerable. Prekladac pri kompilaci kodu vlozi prikaz pro zavolani metody GetEnumerator(), ktera je definovana v rozhrani IEnumerable. Tato metoda vraci odkaz na typ implementujici IEnumerator, ktery implementuje metody MoveNext(), Reset a vlastnost Current. Nakonec prekladac nahradi foreach cyklem while(enum.MoveNext()) {...}, v jehoz tele se pouziva vlastnost Current pro ziskani aktualni polozky. Tot vse.

Souhlasím  |  Nesouhlasím  |  Odpovědět
z  |  25. 02. 2005 08:23

Pokud potřebujeme vyhledat určitý prvek jednorozměrného pole nabízí se nám možnost použití statické metody BinarySearch. Tato metoda vrací index hledaného prvku nebo nulu, když pole hledaný prvek neobsahuje. V ukázce můžete vidět použití jedné z přetížených verzí metody BinarySearch. 

ak prvok nenajde nevrati 0 ale zaporne cislo (0 vrati ked je hladany prvok na prvej pozicii - index 0), aj ked som tuto metodu nikdy nepouzil, myslim ze BinarySearch korektne pracuje len nad utriedenym polom a prvky pola musia implementovat IComparable interface, ako priklad pre vyhladanie lubovolneho prvku lubovolneho pola by som tuto metodu neuvadzal

Souhlasím  |  Nesouhlasím  |  Odpovědět
NB  |  25. 02. 2005 09:16

Otazocka
nemam moc skusenosti, teda aka metoda je najlepsia na vyhladavanie prvkov v poli?
Vdaka

Souhlasím  |  Nesouhlasím  |  Odpovědět
z  |  25. 02. 2005 18:08

zavisi o ake pole ide a hlavne ake je velke, pri malych poliach (do 10 prvkov) je to uplne jedno,
napr. IndexOf fiou, ktora prehlada cele pole, pri utriedenych poliach spominanym binarnym vyhladavanim,
ak treba ale casto hladat v poli ktore je velke, treba pouzit inu strukturu ako pole (napr. triedu HashTable)

Souhlasím  |  Nesouhlasím  |  Odpovědět
NB  |  25. 02. 2005 08:16

Zdravim
Pekny , zrozumitelny clanok, aj cely serial.
Len sa mi zda, ( aj podla MSDN) , ze funkcia BinarySearch ak nenajde hodnotu , nevracia 0 ale zaporne cislo, a asi aj logicky lebo aj 0 je index na ktorom moze byt hladany prvok
 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor