hallo leute. aufgrund Oscar's Thread ( https://autoit.de/index.php?page…8088&%20%20 ) und meiner langeweile hab ich mich hingesetzt und ne simple Funktion zum Sortieren eines 2D-Arrays gebastelt.
Und da ich oft was im Hilfebereich bastle und noch nie was unter Scripte gepostet hab dachte ich mir dass es jetzt mal zeit wird. Vllt kanns ja jemand gebrauchen.
Freue mich über jedes Feedback, gefundene Fehler oder Verbesserungsvorschläge.
Spoiler anzeigen
#include <Array.au3>
Dim $array[100][4]
For $i = 0 To 99
For $j = 0 to 3
$array[$i][$j] = Random(0, 100000, 1)
Next
Next; Array mit Zufallsinhalt erzeugen
$var = _Array2D_Sort($array, 0)
_ArrayDisplay($var)
$var = _Array2D_Sort($array, 1)
_ArrayDisplay($var)
$var = _Array2D_Sort($array, 2)
_ArrayDisplay($var)
$var = _Array2D_Sort($array, 3)
_ArrayDisplay($var)
$var = _Array2D_Sort($array, 4)
MsgBox(0,"",@error)
; #FUNCTION# ====================================================================================================================
; Name...........: _Array2D_Sort
; Description ...: Sorts a 2D Array by Index
; Syntax.........: _Array2D_Sort($avArray[, $iIndex = 0])
; Parameters ....: $avArray - Array to display
; $iIndex - [optional] Sort Array by this Index
; Return values .: Success - Sorted Array
; Failure - 0, sets @error:
; |1 - $avArray is not an Array
; |2 - $avArray is not an 2D-Array
; |3 - $iIndex is out of
; Author ........: Schnitzel
; Modified.......:
; Link ..........: https://autoit.de/index.php?page=Thread&threadID=18117
; Example .......: Yes
; ===============================================================================================================================
Func _Array2D_Sort($avArray, $iIndex = 0)
If Not IsArray($avArray) Then Return SetError(1, 0, 0)
If Not UBound($avArray, 0) = 2 Then Return SetError(2, 0, 0)
If UBound($avArray, 2) <= $iIndex Then Return SetError(3, 0, 0)
Local $bTausch, $sTmp, $i = 0, $iRuns = UBound($avArray)-2
Do
$bTausch = False
For $j = 0 To $iRuns - $i
If $avArray[$j][$iIndex] > $avArray[$j+1][$iIndex] Then
For $k = 0 To UBound($avArray, 2) - 1
$sTmp = $avArray[$j+1][$k]
$avArray[$j+1][$k] = $avArray[$j][$k]
$avArray[$j][$k] = $sTmp
Next
$bTausch = True
EndIf
Next
$i += 1
Until ($bTausch = False) Or ($i = $iRuns)
Return $avArray
EndFunc