Avatar
Buřtík
Neregistrovaný
Avatar
Buřtík:

Když použiji nějakou metodu, která vrací pole, např.:

int[] pole1 = { 1, 2, 3, 4, 5};
int[] pole2 = { 8, 2, 6, 4, 9};
var poleCelkove = pole1.Intersec­t(pole2);

Jak potom můžu zjistit např počet prvků v "poleCelkove"?

poleCelkove.Length; zde nefunguje, děkuji.

 
Odpovědět 21.10.2012 19:22
Avatar
Odpovídá na Buřtík
David Jančík [sczdavos]:

Length funguje. var nepoužívej.

Nahoru Odpovědět 21.10.2012 19:23
Čím více času dostaneš, tím méně ho máš.
Avatar
Buřtík
Neregistrovaný
Avatar
Buřtík:

Jak by tedy prosím potom vypadal ten příklad?
VS mi vyhazuje error:

System.Collec­tions.Generic­.IEnumerable<in­t> neobsahuje definici Length a nebyla nalezena žádná metoda rozšíření Length, která by přijímala první argument typu System.Collec­tions.Generic­.IEnumerable<in­t> (nechybí direktiva using nebo odkaz na sestavení?)

V případě použití jiného typu než var:

Typ System.Collec­tions.Generic­.IEnumerable<in­t> nelze implicitně převést na typ int.

 
Nahoru Odpovědět 21.10.2012 19:26
Avatar
matesax
Redaktor
Avatar
Odpovídá na Buřtík
matesax:

Proč tam máš var? Linq přeci vydá dynamický obsah - již to tedy není pole, ale list...

int[] a = new int[] { 1, 2, 3, 4 };
int[] b = new int[] { 5, 6, 7, 8 };

System.Collections.Generic.IEnumerable<int> c = b.Intersect(a);

int length = c.Count();
Editováno 21.10.2012 19:32
 
Nahoru Odpovědět 21.10.2012 19:31
Avatar
Buřtík
Neregistrovaný
Avatar
Odpovídá na matesax
Buřtík:

Tady v článku není na tohle žádný příklad, tak jsem si vygooglil to s tím varem, což mi nefungovalo. Kromě předchozích článků nemám s C# konzolí žádné zkušenosti, tak jsem o tomhle nic netušil. Děkuji, tohle mi pomohlo. :)

 
Nahoru Odpovědět 21.10.2012 19:38
Avatar
Buřtík
Neregistrovaný
Avatar
Buřtík:

Jak by potom vypadal nějaký příklad s Take, Skip a Reverse?
Nejde mi to ani s tím co jsi napsal. :/

 
Nahoru Odpovědět 21.10.2012 20:03
Avatar
matesax
Redaktor
Avatar
Odpovídá na Buřtík
matesax:

Ale co chceš? Co ti přesně nejde? Čeho chceš docílit?

 
Nahoru Odpovědět 21.10.2012 20:05
Avatar
Buřtík
Neregistrovaný
Avatar
Buřtík:

No když je to zde vysvětlované, tak bych rád, aby mi to fungovalo a vrátilo mi to to, co to vrátit má.. třeba "Take vrátí pole s daným počtem prvků zkopírovaných od začátku původního pole." což mi nevrací, ať dělám co dělám.

 
Nahoru Odpovědět 21.10.2012 20:08
Avatar
Odpovídá na Buřtík
David Jančík [sczdavos]:

Můžeš to pak dát do dalšího pole nebo použít to IEnumerable (dat. typ co vrací metoda Intersect) nebo třeba do seznamu.

List c = b.Intersect(a).ToList();
IEnumerable<int> c = b.Intersect(a);

Atd.

Nebo zkus metodu ToArray.

Nahoru Odpovědět 21.10.2012 20:20
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Buřtík
matesax:

http://msdn.microsoft.com/…b503062.aspx

No problem:

int[]
    a = new int[] { 1, 2, 3, 4 },
    b = new int[] { 5, 6, 7, 8 },
    c = b.Intersect(a).ToArray();

foreach (int item in c.OrderByDescending(item => c).Take(3))
    MessageBox.Show(item + "");
foreach (int grade in new int[] { 59, 82, 70, 56, 92, 98, 85 }.OrderByDescending(grade => grade).Take(2))
    MessageBox.Show(grade + "");
Editováno 21.10.2012 20:26
 
Nahoru Odpovědět 21.10.2012 20:23
Avatar
Buřtík
Neregistrovaný
Avatar
Buřtík:

Tak už mi to jde, díky moc. :)

Řešení (kdyby měl někdo stejný dotaz):

int[] pole1 = new int[] { 1, 2, 3, 4, 5 };
System.Collections.Generic.IEnumerable<int> first = pole1.Skip(2);
foreach (int s in first) {
     Console.WriteLine(s);
}
 
Nahoru Odpovědět 21.10.2012 20:26
Avatar
Buřtík
Neregistrovaný
Avatar
Buřtík:

Ještě se omlouvám, nezobrazovaly se mi ty dvě odpovědi, co jste mi teď postnuli, tak jsem na ně nemohl reagovat a moje předchozí zpráva už nejde smazat.:)

 
Nahoru Odpovědět 21.10.2012 20:28
Avatar
matesax
Redaktor
Avatar
Odpovídá na Buřtík
matesax:

Není jednodušší:

foreach (int s in new int[] { 1, 2, 3, 4, 5 }.Skip(2))
    Console.WriteLine(s);

? :)

 
Nahoru Odpovědět 21.10.2012 20:28
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Buřtík
David Čápka:

Můžeš psát jen IEnumerable :) Pole je jednoduše řečeno podkategorie IEnumerable (přesněji. implementuje jeho rozhraní). Do článku to doplním, nenapadlo mě, že to nevrací přímo pole.

Editováno 21.10.2012 20:31
Nahoru Odpovědět 21.10.2012 20: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 matesax
David Čápka:

Není, málokdy si pole deklaruješ v cyklu.

Nahoru Odpovědět 21.10.2012 20:30
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
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:

Tak to jsem asi vyjímka - takto totož zkracuji všechno... :) (Nechápu význam přechodných proměnných.)

 
Nahoru Odpovědět 21.10.2012 20:33
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:

Pole (v daném případě spíš seznam) se v cyklu deklaruje poměrně často, pokud je konstantní. Například v Bashi to skoro jinak nejde. Resp. to jde, ale není to triviální a často se v tom dělají chyby.

Větším nešvarem je změna hodnot proměnných za běhu programu.

Nahoru Odpovědět 21.10.2012 22:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 17 zpráv z 17.