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

  • modder

    aktív tag

    válasz Jim-Y #6404 üzenetére

    if($multiples -contains $files[$i].Name){ } -- Ahogy nő a $multiples tömb, egyre inkább több időt fog tölteni azzal, hogy a fájlnevet megtalálja benne, mert a -contains végignézi az egész tömböt. A duplikált fájlnevek tárolására használj inkább asszociatív tömböt, mert azt fájlnév szerint lehet címezni, és a szervezése Hash táblaszerű, tehát gyorsabb benne név alapján megtalálni egy elemet.
    http://powershell.com/cs/blogs/tips/archive/2009/09/09/checking-whether-hash-table-contains-key.aspx

    for($j=$i+1;$j -lt $length;++$j){
    if($files[$j].Name -eq $elem.Name -and $files[$j].Length -eq $elem.Length){
    $multiples += $files[$j].FullName
    $ismultiple = 1
    }
    }

    -- Itt a belső ciklusban szintén szekvenciálisan keresel végig a fájlnevek listáján, aminél átlagos keresési idő n/2. Jobb eredményt érsz el, ha először a fájlnevek listáját rendezed név szerint növekvő sorrendben, és egy ismert egyszerű kereső algoritmust használsz rá, pl. bináris keresés. Nem tudom, hogy erre van-e beépített szolgáltatása a Powershellnek, de lehet valaki már írt rá kódot a neten.

    Mivel gondolom egy egyszeri feladat volt, ezért már nem fogsz vele vacakolni, de van helye a fejlődésnek

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