Hallo com,
hier ein kleines Skript zum sortieren von 2D-Arrays. Angregt worden bin ich dazu durch [ gelöst ] _ArraySort sortiert "komisch".
Man kann nach folgenden Formaten für die Sortierung angeben: Numerisch, Datum (normal JJJJ/MM/TT), Geburtstag (MM/TT/JJJJ) und natürlich ohne (Standard = ASCII).
Update: honzugekmmen sind Start- und Endparmeter, so dass die Funktin auch auf Arrays mit Überschrift in Zeile 0 angewendet werden kann. Desweiteren kann jetzt auch absteigend sortiert und einmalige Einträge erzwungen werden. Diese beiden Parameter beziehen sich auf alle Spalten einer Zeile.
Demo (wie einsetzen):
Spoiler anzeigen
#include <array.au3>
#include <date.au3>
#include <arraySort2D_MC.au3>
Global $array[10000][3]
$array[0][0] = "Text"
$array[0][1] = "Zahl"
$array[0][2] = "Datum"
For $i = 1 To 9999
;rein Ascii
$array[$i][0] &= Chr(Random(65, 90, 1))
For $j = 1 To 9
$array[$i][0] &= Chr(Random(97, 122, 1))
Next
;Zahl
$array[$i][1] = Random(1, 999, 1)
For $j = 1 To Random(0, 6, 1)
if $j = 1 Then $array[$i][1] &= ","
$array[$i][1] &= Chr(Random(48, 57, 1))
Next
;Datum
$array[$i][2] = Random(1, 31, 1) & "." & Random(1, 12, 1) & "." & Random(1945, 1994, 1)
Next
_ArrayDisplay($array, "Unsortiert")
[/autoit] [autoit][/autoit] [autoit];Numerische Sortierung
$bench_start = TimerInit()
;Func _arraySort2D_MC(ByRef $avArray, $ColOrder, $iStart=0,$iEnd=0,$iDesc=0,$bDelDuplictes=False)
_arraySort2D_MC($array, "1%N|2%D|0", 1)
$bench_end = Round(TimerDiff($bench_start), 2)
ConsoleWrite("Laufzeit _arraySort2D_MC: " & $bench_end & " ms!" & @CRLF)
_ArrayDisplay($array, "sortiert nach Col 1 als Zahl (1%N|2%D|0|)")
;sortierung nch Datum JJJJ/MM/TT
$bench_start = TimerInit()
_arraySort2D_MC($array, "2%D|0|1%N", 1)
$bench_end = Round(TimerDiff($bench_start), 2)
ConsoleWrite("Laufzeit _arraySort2D_MC: " & $bench_end & " ms!" & @CRLF)
_ArrayDisplay($array, "sortiert nach Col 2 als Datum (2%D|0|1%N)")
;Sortierung nach Geburtstag MM/TT/JJJJ
$bench_start = TimerInit()
_arraySort2D_MC($array, "2%G|0|1%N", 1)
$bench_end = Round(TimerDiff($bench_start), 2)
ConsoleWrite("Laufzeit _arraySort2D_MC: " & $bench_end & " ms!" & @CRLF)
_ArrayDisplay($array, "sortiert nach Col 2 als Geburtstag (2%G|0|1%N)")
;und jetzt doppelte Zeilen erzeugen
For $i = 1 To 99 Step 2
For $j = 0 To 2
$array[$i][$j] = $array[$i + 1][$j]
Next
Next
;normale Sortierung absteigend doppelte Zeilen verhindern
$bench_start = TimerInit()
_arraySort2D_MC($array, "0|1%N|2%D", 1, 0, 1, True)
$bench_end = Round(TimerDiff($bench_start), 2)
ConsoleWrite("Laufzeit _arraySort2D_MC: " & $bench_end & " ms!" & @CRLF)
_ArrayDisplay($array, "sortiert nach Col 0 als Text absteigend doppelte Zeilen werden gelöscht (0|1%N|2%D|")
ScreenShots:
autoit.de/wcf/attachment/7950/
autoit.de/wcf/attachment/7951/
bisherige Downlads: 184
mfg (Auto)Bert