Új hozzászólás Aktív témák

  • ArchElf

    addikt

    válasz stevve #1638 üzenetére

    Nem egyszerűen kitörlöm az első listából, hanem, mivel a lista elemei nem törölhetők közvetlenül a foreach ciklusban, így az elemeket egyesével végignézem, hogy törlendők-e, ha igen hozzáadom egy másik listához (törlendő elemek listája). Ekkor az első listából nem tudok még törölni (mert invalid lesz az iterátor).
    A második ciklusban a törlendő elemek listáján lépkedek végig. Ekkor minden elemre kiadom az elsőlista.Remove(ojjektum) parancsot (ahol az ojjektum a törlendő elemek listájának aktuális eleme). Mivel most a második lista iterátorát használom, így nyugodtan eleht az első listából törölni. A második lista végigjátszása után nyugodtan lehet magát a második listát is törölni (mivel már nincs rá szükség).
    Még egy apróság: amennyiben több szálon párhuzamosan is elérjük a listát a futás alatt (szükséges lehet bizonyos esetekben), úgy azt az egész cécó alatt lockolni kell.

    Remélem érthető volt.

    Még egy. Ha a listaelemeket nem lehet rendesen egymáshoz hasonlítani akkor lehet index alapján is törölni, ez viszont macerásabb.
    Ebben az esetben egy fordított for ciklussal célszerű megcsinálni, mert így az indexek nem keverednek össze:
    for(ix = lista.Length-1; ix >= 0; ix--)
    {
    if(törlendő(lista[ix]))
    lista.RemoveAt(ix);
    }

    De láttam ilyet is a neten:
    foreach(object o in new List<object>(lista))
    {
    if (törlendő(o))
    lista.Remove(o);
    }

    AE

    Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]

Új hozzászólás Aktív témák