Hmn, erstmal vorweg: Die Überschrift ist bestimmt nicht am besten gewählt, aber naja
Vor längeren hatte fredowsky eine Funktion gebraucht, die das Array nach der Häufigkeit seines Inhaltes sortiert.
Ich habe die Funktion immernoch auf der Festplatte hier rumliegen und würde sie euch gerne zur Verfügung stellen.
Sicher gibt es flexiblere möglichkeiten (und vor allem schnellere), aber ich hab diese nicht groß ausgebaut.
Die Funktion kann nur ein 1D-Array sortieren.
Ab 1000 Einträgen verbraucht die Funktion mind. 2-3 Sekunden an Zeit.
Wenn jemand die Funktion ausbauen will, kann er/sie das tun. Die Funktionsbeschreibung habe ich einfach auf die schnelle dahin geschrieben.
Und hier die Funktion:
Spoiler anzeigen
; #FUNCTION# ====================================================================================================================
; Name ..........: _Sort
; Description ...: Sortiert ein Array nach der Häufigkeit seiner Einträge.
; Syntax ........: _Sort($Array[, $flag = True])
; Parameters ....: $Array - Das zu sortierende Array.
; $flag - [optional] True : Absteigend sortieren.
; False: Aufsteigend sortieren.
; Return values .: Das sortierte Array.
; Author ........:
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _Sort($Array, $flag = True)
; ++++++ ++++++ ++++++ ++++++ ++++++ ++++++
Local $UBound = UBound($Array, 1) - 1
Local $count = 0
Local $Save[$UBound + 1][2]
Local $Sort[$UBound + 1]
; ++++++ ++++++ ++++++ ++++++ ++++++ ++++++
For $a = 0 To $UBound
For $b = 0 To $UBound
If $Save[$b][1] = '' Then
$Save[$b][0] = $Array[$a]
$Save[$b][1] = 1
$b = $UBound
ElseIf $Save[$b][0] = $Array[$a] Then
$Save[$b][1] += 1
$b = $UBound
EndIf
Next
Next
; ++++++ ++++++ ++++++ ++++++ ++++++ ++++++
For $c = 0 To $UBound
For $d = 0 To $UBound
If $Save[$d][1] = $c + 1 Then
For $e = 0 To $c
$Sort[$e + $count] = $Save[$d][0]
Next
$count += $Save[$d][1]
EndIf
Next
Next
; ++++++ ++++++ ++++++ ++++++ ++++++ ++++++
If $flag Then _Invertieren($Sort)
Return $Sort
EndFunc ;==>_Sort
; #FUNCTION# ====================================================================================================================
; Name ..........: _Invertieren
; Description ...: Dreht die Inhalte des Array's um.
; Syntax ........: _Invertieren(Byref $Array)
; Parameters ....: $Array - [in/out] Das zu umkehrende Array.
; Return values .: None
; Author ........:
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _Invertieren(ByRef $Array)
; ++++++ ++++++ ++++++ ++++++ ++++++ ++++++
Local $UBound = UBound($Array, 1) - 1
Local $count = 0
Local $Save[$UBound + 1]
; ++++++ ++++++ ++++++ ++++++ ++++++ ++++++
For $a = 0 To $UBound
$Save[$a] = $Array[$a]
Next
; ++++++ ++++++ ++++++ ++++++ ++++++ ++++++
For $b = $UBound To 0 Step -1
$Array[$b] = $Save[$count]
$count += 1
Next
; ++++++ ++++++ ++++++ ++++++ ++++++ ++++++
EndFunc ;==>_Invertieren
Will ich mal hoffen, dass sie vllt. Dem einem oder andere hilft.