Array-Sortierung: 51 vor 509

  • Hi,
    Ich will ein Array sortieren. Das Problem ist nun, dass _ArraySort das Zeichenweise macht, also liegt zb 51 vor 509, weil 1 > 0 - was kann man da machen, ausser ne Sortierfunktion komplett selbst zu schreiben?!

    danke

    Einmal editiert, zuletzt von LilProgger208 (5. November 2010 um 11:40)

  • ja, das ist aber nur die Reihenfolge - hier geht es ja um das Problem, dass zB

    26
    256
    25

    bei der Sortierung herauskommt.

  • Also ich weiß nicht womit du sortierst aber wenn ich die werte 25,26 und 256 nehme bekomm ich entweder
    25
    26
    256
    oder
    256
    26
    25

    2 Mal editiert, zuletzt von Milla (4. November 2010 um 12:18)

  • Vieleicht besteht das Problem nur beim Sortieren eines 2D-Array oder deswegen, weil das ganze als Zeichenkette (as ner .htm) eingelesen wird (auch wenn AutoIt da eigentlich keinen Unterschied macht/machen sollte?!)

  • Ich hab das Problem gefunden.
    Ich nehme mal schwer an du hast die Zahlen als Strings ins Array geschrieben denn dann sortiert er so wie du es gezeigt hast, was dann auch logisch ist.
    Also entweder als Zahlen ins Array schreiben, die inhalte im Array zu integer konvertieren oder eigene Funktion schreiben welche die Strings so sortiert wie du es möchtest.

  • Der Unterschied ist einfach das du keine richtigen Zahlen im Array stehen hast sondern Strings welche Zahlen darstellen.
    Aber Strings werden nunmal wie Strings sortiert - nämlich zeichenweise.
    Also musst du die Stringzahlen in richtige Zahlen ändern.
    Mal als Beispiel zur Verdeutlichung:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $aTest1[3] = ["256", "25", "26"]
    Global $aTest2[3] = [256, 25, 26]
    Global $aTest3[3] = [Number("256"), Number("25"), Number("26")]

    [/autoit] [autoit][/autoit] [autoit]

    _ArraySort($aTest1)
    _ArrayDisplay($aTest1)

    [/autoit] [autoit][/autoit] [autoit]

    _ArraySort($aTest2)
    _ArrayDisplay($aTest2)

    [/autoit] [autoit][/autoit] [autoit]

    _ArraySort($aTest3)
    _ArrayDisplay($aTest3)

    [/autoit]

    Edit: Letzter... :(

  • Das wirkliche Problem ist, dass Autoit das erkennen sollte, da es jam in AutoIt eigentlich keinen Unterschied zwischen String und Int gibt und das bei der Sortierung entsprechend funktionieren sollte....

    Jedenfalls danke für die Hilfe

  • da es jam in AutoIt eigentlich keinen Unterschied zwischen String und Int


    Tatsächlich? Dann haben die Funktionen

    [autoit]


    IsInt()
    IsString()
    IsFloat()
    IsBool()

    [/autoit]


    also überhaupt keinen Sinn? ;)

    edit: wenn gelöst dann bitte den ersten Beitrag bearbeiten und auf [gelöst] ändern. Danke!