Noch eine kleine Funktion wie MultiIndexOf, aber nur für dynamische Arrays.
Code
Declare int wuerfel[25,25]
Declare string s
$I c:\XProfan\Projekte\Include\MultiIndexOf.inc
$I c:\XProfan\Projekte\Include\UniqueDynArray.inc
cls
wuerfel[3,8] = 17
wuerfel[12,12] = 17
wuerfel[17, 3] = 17
wuerfel[24,25] = 17
Print "wuerfel[3,8] = 17"
Print "wuerfel[12,12] = 17"
Print "wuerfel[17, 3] = 17"
Print "wuerfel[24,25] = 17"
Print " "
s = MultiIndexOf( wuerfel[], 17,-1 ) : print s $ " -- Len: " $ Len(s,";")
Print " "
s = MultiIndexOf( wuerfel[], 17, 1 ) : print s $ " -- Len: " $ Len(s,";")
Print " "
s = MultiIndexOf( wuerfel[], 17, 2 ) : print s $ " -- Len: " $ Len(s,";")
Print " "
s = MultiIndexOf( wuerfel[], 17, 3 ) : print s $ " -- Len: " $ Len(s,";")
Print "\nLastIndexOf:"
s = MultiIndexOf( wuerfel[], 17,-1 ) : print SubStr$(s, Len(s,";"), ";") $ " -- Idx: " $ Len(s,";")
waitinput
Var string arr[] = "Alfa","Alfa-Echo","Bravo","Charlie","Charlie-Hotel","Delta","Echo","Echo","Echo","Foxtrot","Golf","Hotel","India",\
"Juliett","Kilo","Lima","Mike","November","Oscar","Oscar-Echo","Papa","Quebec","Romeo","Sierra","Sierra-Sierra","Tango",\
"Uniform","Uniform-Echo","Victor","Whiskey","X-Ray","Yankee","Zulu"
Print "\nfinde ECHO vor Unique():"
s = MultiIndexOf( arr[], "Echo", -1 ) : print s $ " = ECHO"
UniqueDynArray( arr[] )
Print "\nfinde ECHO nach Unique():"
s = MultiIndexOf( arr[], "Echo", -1 ) : print s $ " = ECHO"
waitend
Alles anzeigen
Code: UniqueDynArray.inc
' Autor: Michael Wodrich
' XProfan X3.1
Proc UniqueDynArray
Declare string PT, int PC : PT = PType$(1) : PC = %PCount
Declare int a,b, max_a
Var int sorted = 1
Var int dele = 0
Select PT
CaseOf "%[]" // Integer (Int)
Parameters int arr_I[]
max_a = SizeOf(arr_I[]) - 1
If max_a > 0
a = 0
While (sorted = 1) and (a < max_a)
Case arr_I[a] > arr_I[a + 1] : sorted = 0
Inc a
EndWhile
If sorted
a = 0
Repeat
WhileLoop a + 1, max_a
If arr_I[a] == arr_I[&loop]
Inc dele
Else
If dele
ArrDel arr_I[], a + 1, dele
Dec max_a, dele
Clear dele
EndIf
BREAK
EndIf
EndWhile
Inc a
Until a >= max_a
Else
a = 0
Repeat
WhileLoop max_a, a + 1, -1
If arr_I[a] == arr_I[&loop]
ArrDel arr_I[], &loop, 1
Dec max_a
EndIf
EndWhile
Inc a
Until a >= max_a
EndIf
EndIf
CaseOf "&[]" // Longint (Long), Handle (Pointer)
Parameters long arr_L[]
max_a = SizeOf(arr_L[]) - 1
If max_a > 0
a = 0 : While (sorted = 1) and (a < max_a) : Case arr_L[a] > arr_L[a + 1] : sorted = 0 : Inc a : EndWhile
If sorted
a = 0 : Repeat : WhileLoop a + 1, max_a : If arr_L[a] == arr_L[&loop] : Inc dele : Else : If dele : ArrDel arr_L[], a + 1, dele : Dec max_a, dele : Clear dele : EndIf : BREAK : EndIf : EndWhile : Inc a : Until a >= max_a
Else
a = 0 : Repeat : WhileLoop max_a, a + 1, -1 : If arr_L[a] == arr_L[&loop] : ArrDel arr_L[], &loop, 1 : Dec max_a : EndIf : EndWhile : Inc a : Until a >= max_a
EndIf
EndIf
CaseOf "Q[]" // Quadint (Quad)
Parameters quad arr_Q[]
max_a = SizeOf(arr_Q[]) - 1
If max_a > 0
a = 0 : While (sorted = 1) and (a < max_a) : Case arr_Q[a] > arr_Q[a + 1] : sorted = 0 : Inc a : EndWhile
If sorted
a = 0 : Repeat : WhileLoop a + 1, max_a : If arr_Q[a] == arr_Q[&loop] : Inc dele : Else : If dele : ArrDel arr_Q[], a + 1, dele : Dec max_a, dele : Clear dele : EndIf : BREAK : EndIf : EndWhile : Inc a : Until a >= max_a
Else
a = 0 : Repeat : WhileLoop max_a, a + 1, -1 : If arr_Q[a] == arr_Q[&loop] : ArrDel arr_Q[], &loop, 1 : Dec max_a : EndIf : EndWhile : Inc a : Until a >= max_a
EndIf
EndIf
CaseOf "![]" // Float (Double)
Parameters float arr_F[]
max_a = SizeOf(arr_F[]) - 1
If max_a > 0
a = 0 : While (sorted = 1) and (a < max_a) : Case arr_F[a] > arr_F[a + 1] : sorted = 0 : Inc a : EndWhile
If sorted
a = 0 : Repeat : WhileLoop a + 1, max_a : If arr_F[a] == arr_F[&loop] : Inc dele : Else : If dele : ArrDel arr_F[], a + 1, dele : Dec max_a, dele : Clear dele : EndIf : BREAK : EndIf : EndWhile : Inc a : Until a >= max_a
Else
a = 0 : Repeat : WhileLoop max_a, a + 1, -1 : If arr_F[a] == arr_F[&loop] : ArrDel arr_F[], &loop, 1 : Dec max_a : EndIf : EndWhile : Inc a : Until a >= max_a
EndIf
EndIf
CaseOf "S[]" // Single
Parameters single arr_S[]
max_a = SizeOf(arr_S[]) - 1
If max_a > 0
a = 0 : While (sorted = 1) and (a < max_a) : Case arr_S[a] > arr_S[a + 1] : sorted = 0 : Inc a : EndWhile
If sorted
a = 0 : Repeat : WhileLoop a + 1, max_a : If arr_S[a] == arr_S[&loop] : Inc dele : Else : If dele : ArrDel arr_S[], a + 1, dele : Dec max_a, dele : Clear dele : EndIf : BREAK : EndIf : EndWhile : Inc a : Until a >= max_a
Else
a = 0 : Repeat : WhileLoop max_a, a + 1, -1 : If arr_S[a] == arr_S[&loop] : ArrDel arr_S[], &loop, 1 : Dec max_a : EndIf : EndWhile : Inc a : Until a >= max_a
EndIf
EndIf
CaseOf "$[]" // String
Parameters string arr_Str[]
max_a = SizeOf(arr_Str[]) - 1
If max_a > 0
a = 0 : While (sorted = 1) and (a < max_a) : Case arr_Str[a] > arr_Str[a + 1] : sorted = 0 : Inc a : EndWhile
If sorted
a = 0 : Repeat : WhileLoop a + 1, max_a : If arr_Str[a] == arr_Str[&loop] : Inc dele : Else : If dele : ArrDel arr_Str[], a + 1, dele : Dec max_a, dele : Clear dele : EndIf : BREAK : EndIf : EndWhile : Inc a : Until a >= max_a
Else
a = 0 : Repeat : WhileLoop max_a, a + 1, -1 : If arr_Str[a] == arr_Str[&loop] : ArrDel arr_Str[], &loop, 1 : Dec max_a : EndIf : EndWhile : Inc a : Until a >= max_a
EndIf
EndIf
CaseOf "W[]", "µ[]" // Widestring (Wide)
Parameters wide arr_W[]
max_a = SizeOf(arr_W[]) - 1
If max_a > 0
a = 0 : While (sorted = 1) and (a < max_a) : Case arr_W[a] > arr_W[a + 1] : sorted = 0 : Inc a : EndWhile
If sorted
a = 0 : Repeat : WhileLoop a + 1, max_a : If arr_W[a] == arr_W[&loop] : Inc dele : Else : If dele : ArrDel arr_W[], a + 1, dele : Dec max_a, dele : Clear dele : EndIf : BREAK : EndIf : EndWhile : Inc a : Until a >= max_a
Else
a = 0 : Repeat : WhileLoop max_a, a + 1, -1 : If arr_W[a] == arr_W[&loop] : ArrDel arr_W[], &loop, 1 : Dec max_a : EndIf : EndWhile : Inc a : Until a >= max_a
EndIf
EndIf
Otherwise
Error 999,"nur mit dyn. Arrays einsetzen"
EndSelect
EndProc
Alles anzeigen