Array sortieren, nicht 1,10,100,2,3 sondern 1,2,3,10,100

  • hallo zusammen

    im array ist folgendes:

    Dim $Array[4]=["1.jpg","2.jpg","10.jpg","100.jpg","3.jpg"]

    _ArrayDisplay($Array) ;;zeigt an 1.jpg 2.jpg 10.jpg 100.jpg 3.jpg


    also sortieren

    _ArraySort($Array,0,1)

    _ArrayDisplay($Array) ;;zeigt an 1.jpg 10.jpg 100.jpg 2.jpg 3.jpg


    gewünscht ist aber 1.jpg 2.jpg 3.jpg 10.jpg 100.jpg

    also ganz "natürlich" sortiert


    DuG

    Einmal editiert, zuletzt von supernova (31. Oktober 2013 um 15:31) aus folgendem Grund: hat sich niemand mehr gemeldet

  • Der einfachste Algorithmus wäre wahrscheinlich Bubble Sort, damit könntest du dir ohne Probleme eine eigene Funktion basteln. Am Anfang schneidest du dann einfach ".jpg" ab, und wenn das Array sortiert ist hängst du es an jedes Element wieder an.

    Es könnte aber auch sein, dass dafür schon mal jemand irgendwo eine Funktion gepostet hat, aber da du gefragt hast ist dem wahrscheinlich nicht so.

  • Was Du da hast ("1.jpg") sind ganz normale strings. Und die werden eben von links nach rechts sortiert. Wenn Du numerisch sortieren willst, dann musst Du entweder alle Namen in die selbe Länge bringen (also aus "1.jpg" wird "001.jpg") oder Du programmierst eine eigene numerische Sortierfunktion.

  • vielen dank für eure schnelle hilfe/ideen

    habe hier die lösung gefunden

    [ gelöst ] Array logisch sortieren BugFix hier was für dich ;)

    darin macht progandy die deutschsprachige version wahr vom link von UEZ

    _ArrayNatuarlSort hat aber einen bug wie ich feststellte.

    ist nämlich im array[0] die anzahl/länge vom array enthalten, so wird dieses wie ein xyz.jpg auch mit sortiert.

    auf die schnelle habe ich es so gemacht:
    ;;alle Bilder/Dateien in Array
    $aBild=_FileListToArray($cVon,"*",1)

    ;;Array manipulieren und sortieren
    _ArrayDelete($aBild,0) ;;<========== hier lösche ich einfach den ersten(0) eintrag im array


    _ArrayNaturalSort($aBild)
    $nBild=UBound($aBild)-1


    DuG