- Offizieller Beitrag
Ich habe Dein Beispiel mal ein wenig angepasst, um die Problematik zu verdeutlichen:
Spoiler anzeigen
#include <Array.au3>
Dim $array[100][4]
For $i = 0 To 99
For $j = 0 To 3
$array[$i][$j] = Random(0, 10, 1)
Next
Next; Array mit Zufallsinhalt erzeugen
_Array2D_Sort($array, 0)
_ArrayDisplay($array)
; #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(ByRef $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)
EndFunc ;==>_Array2D_Sort
Wenn jetzt die Werte im ersten Element gleich sind, dann sollen die gleichen nach dem Wert des zweiten Elements sortiert werden. Das ist bei Deiner Funktion nicht der Fall.