Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - 2 Array Items miteinander Vertauschen
R4id - Fr 21.08.09 21:29
Titel: 2 Array Items miteinander Vertauschen
Hallo.
Ich hab hier eine Klasse:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TVGUIGameMenuItem = class(TObject) private FID: Integer; FName: string; FCommand: string; FOnlyInGame: Boolean; public constructor Create(); overload; constructor Create(const ID: Integer; const Name, Command: string; const OnlyInGame: Boolean); overload;
function AsString(): string;
property ID: Integer read FID write FID; property Name: string read FName write FName; property Command: string read FCommand write FCommand; property OnlyInGame: Boolean read FOnlyInGame write FOnlyInGame; end; |
und das dazu gehörige Array:
Delphi-Quelltext
1: 2:
| type TVGUIGameMenuItems = array of TVGUIGameMenuItem; |
Wenn ich nun 2 Items in diesem Array habe, wie kann ich diese miteinander vertauschen?
Beispiel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Array[0] = ID: 0 Name: 'Index 0' Command: 'cmd' OnlyInGame: true
Array[1] = ID: 1 Name: 'Index 1' Command: 'cmd' OnlyInGame: false |
Diese 2 Items sollen nun miteinander vertauscht werden.
Ich hab mir hier schon mal eine Procedure zusammen "gewürfelt", bin mir aber nicht sicher ob diese 100% fehler frei funktioniert (Ich meine mit dem Speicher [Memory], und Access Violation).
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure SwitchItems(var AArray: TVGUIGameMenuItems; const AIndex1, AIndex2: Integer); var Item1, Item2: Pointer; begin Item1 := Pointer(AArray[AIndex1]); Item2 := Pointer(AArray[AIndex2]);
AArray[AIndex1] := TVGUIGameMenuItem(Item2); AArray[AIndex2] := TVGUIGameMenuItem(Item1); end; |
Gruß
jaenicke - Fr 21.08.09 21:34
Was spricht gegen die normale Vorgehensweise ohne die ganzen unnötigen Casts usw.? :gruebel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure SwitchItems(var AArray: TVGUIGameMenuItems; const AIndex1, AIndex2: Integer); var TempItem: TVGUIGameMenuItem; begin TempItem := AArray[AIndex1]; AArray[AIndex1] := AArray[AIndex2]; AArray[AIndex2] := TempItem; end; |
R4id - Sa 22.08.09 12:51
Ich hatte immer eine Access Violation bei dieser Variante, lag aber daran das ich auf einen ungelültigen Index zugreifen wollt.
Danke!
Gruß
Dude566 - Sa 22.08.09 14:05
Das ist im Prinzip wie beim Bubblesort wo auch eine Hilfsvariable hinzugezogen wird um beide auszutauschen, nachdem verglichen wurde ob Variable1 größer als Variable2 ist.
R4id - Sa 22.08.09 16:21
Darauf hätt ich auch kommen können, mir da was abgucken zukönnen ^^
Gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!