Diskuze: Viacnásobné mazanie item-ov z colekcie - problém
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 10 zpráv z 10.
//= 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.
Ahoj, napadají mě dvě možnosti řešení.
Díky za radu, ale nakoniec to išlo jednoducho:
for (int i = KhmZaznamy.Count - 1; i >= 0; i--)
{
if (KhmZaznamy[i].Mnozstvo == "0")
{
KhmZaznamy.RemoveAt(i);
}
}
V obou cyklech při smazání (nevím jak vypadá metoda OdoberKhmZaznam(KhmZaznamy[i]); a proč to nemažeš rovnou v cyklu) musíš dekrementovat i. Protože při smazání položky dojde ke zmenšení celkové velikosti
Tj
List<Khm> list = new List<Khm>()
{
new Khm(1), new Khm(5), new Khm(0), new Khm(3), new Khm(0)
};
for (int i = 0; i < list.Count; i++)
{
if (list[i].Mnozstvi == 0)
{
list.RemoveAt(i);
i--;
}
}
Nebo pokud znáš a vyznáš s v LINQ tak například
list.RemoveAll(x=> x.Mnozstvi == 0);
to ještě není linq, ale extension methods
ale jinak jako řešení, velice elegantní
Ve skutečnosti je to taky LINQ, jen s jinou syntaxí. Kompiluje se to pak stejně na extension metody a ty zase dále na ...
Je to elegantne, ale aj tak si myslim, ze to prekladac prelozi rovnako ako ten cyklus.
To je stějně hloupé jako říkat raketoplánu raketa.
Len pre informáciu
list.RemoveAll(x=> x.Mnozstvi == 0);
nefunguje, pretože ObservableCollection nepozná metódu RemoveAll().
Zobrazeno 10 zpráv z 10.