#25 End
no pokud budes procházet prvky a před nosem si je z pole mazat, tak ti to přeteče vždy, pokud nebudeš snižovat index a je jedno jestli je to procházíš od začátku.nebo od konce a u iterace to ani nejde (v javě třeba ano)
List<int> pole = new List<int>(new[] { 1, 2, 3, 4, 5, 6 });
for (int i = 0; i < pole.Count; i++) {
if (pole[i] % 2 == 0) {
pole.RemoveAt(i);
// snizis index, protoze se prvky posunou o 1 index doleva,
// takze projdes stejny index znovu
i--;
}
}
Doporučuju udělat něco více generickýho, aby se to dalo použít pro všechny typy a nebylo třeba vytvářet znova cykly...
// pomocna metoda, pro filtrovani (odebirani) prvku z listu
public static void FilterList<T>(List<T> input, Func<T, bool> filter)
{
if (input == null || filter == null) return;
for (int i = 0; i < input.Count; i++) {
if (filter(input[i])) {
input.RemoveAt(i);
i--;
}
}
}
// nejaky list
List<int> pole = new List<int>(new[] { 1, 2, 3, 4, 5, 6 });
// ukazka pouziti.. pokud jakykoliv logicky vyraz
// (v tomhle pripade) "item % 2 == 0" bude True, tak prvek odebere
FilterList(pole, item => item % 2 == 0);