Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Suche Array funktionen
mccom - Di 19.12.06 23:20
Titel: Suche Array funktionen
Hm, ich bin verzweifelt. Ich hab bei der Suche und in google nach "arrays" "array funktionen" "array operatoren" gesucht, aber nichts gefunden. Von PHP kenn ich halt die einzelnen Funktionen um Arrays zu sortieren, in ihnen zu suchen, sie zu verbinden etc.
In Delphi hab ich jetzt davon nichts gefunden hier im Forum auch nicht. Suche ich nach den falschen begriffen? Oder gibt es socwas nicht? delphi liefert auch auch fast die selben Befehle zur String-Funktion mit^^
Wäre super wenn mir jemand helfen könnte...
Moderiert von
Christian S.: Topic aus VCL (Visual Component Library) verschoben am Di 19.12.2006 um 23:28
joker0000 - Mi 20.12.06 00:21
var x: array[a..b] of c; (a=start-z.b.1; b=ende-z.b.10; c=typ-z.b string oder integer)
sortieren geht mit bubblesort z.b. (kannste dich im netz schlau machen)
dazu dann n zwischenspeicher-stell dir vor du willst von 2 gläsern die flüssigkeiten austauschen, dazu 3. glas.
wofür brauchst du denn das array? wäre sicher hilfreicher, wenn man das wüsste, aber vllt. reicht dir das ja schon???
dann gibts ja noch 2-dimensionale arrays, davon hab ich allerdings keine ahnung...
wulfskin - Mi 20.12.06 00:57
Hallo,
Delphi hat nicht so viele Funktionen für Arrays, dafür gibt es mehrere verschiedene Listen (TList, TObjectList, ...) die einem ordentlich die Arbeit abnehmen!
Gruß Hape!
alzaimar - Mi 20.12.06 09:13
joker0000 hat folgendes geschrieben: |
var x: array[a..b] of c; (a=start-z.b.1; b=ende-z.b.10; c=typ-z.b string oder integer)
sortieren geht mit bubblesort z.b. (kannste dich im netz schlau machen) |
Nee, bitte nicht Bubblesort, nimm bitte Quicksort.
Für numerische Arrays gibt es bei Delphi nichts. Das muss man sich selber basteln.
Logikmensch - Mi 20.12.06 11:05
Schön ist die Verwendung von dynamischen Arrays, denn die können prinzipiell aus beliebigen Daten bestehen (vorsicht: bei Objekten-Arrays ist TList bzw. TObjectList vorzuziehen). Wenn das Array die physikalischen Grenzen der Speicherverwaltung nicht sprengt, kann man es einfach mit
var
irgendwas:array of irgendeintyp;
deklarieren. Das Array sollte mit Setlength(irgendwas,Anzahl) oder mit SetLength(irgendwas,0) initialisiert werden. Im Grunde ist das dann eine Art String. Daher kann man auch jederzeit mit Length(irgendwas) die momentane (= dynamische) Länge an Elementen ermitteln. Gelöscht wird das Array dann einfach durch Zuweisen mit SetLength(irgendwas,0) bzw. automatisch innerhalb einer Prozedur/Funktion durch den Rahmencode vom Delphi.
Löschen, hinzufügen muss man dann aber selber machen, leider greifen die Stringfunktionen Copy und Delete hierbei nicht.
Christian S. - Mi 20.12.06 13:44
Logikmensch hat folgendes geschrieben: |
Schön ist die Verwendung von dynamischen Arrays, denn die können prinzipiell aus beliebigen Daten bestehen |
Hinsichtlich der verwendbaren Datentypen gibt es zwischen dynamischen und statischen Arrays keine Unterschiede. In beiden kann man alle benutzen ;-)
Logikmensch hat folgendes geschrieben: |
Wenn das Array die physikalischen Grenzen der Speicherverwaltung nicht sprengt, kann man es einfach mit
var
irgendwas:array of irgendeintyp;
deklarieren. |
Da an der Stelle noch gar kein Speicher belegt wird, ist das immer möglich.
Logikmensch hat folgendes geschrieben: |
Das Array sollte mit Setlength(irgendwas,Anzahl) oder mit SetLength(irgendwas,0) initialisiert werden. |
Logikmensch hat folgendes geschrieben: |
Im Grunde ist das dann eine Art String. |
:shock: Wo ist da ein String?
Grundlagen zu Arrays habe ich z.B.
hier [
http://www.christian-stelzmann.de/artikel/crashkurs.htm#arrays] beschrieben.
Böser Borstel - Mi 20.12.06 14:03
wulfskin hat recht, leite einfach von tlist oder tobjectlist ab und überschreibe die sortiermethode
mccom - Mi 20.12.06 21:47
Erstmal danke für eure super guten Tipps. Also was will ich machen:
Ein Programm das bei Eingabe eines Strings(Krankheitsbeschreibung) in einer Datenbank(Ini-Datei für erste Beta wegen KKompatibilität)nachschauen soll, ob er diese Krankheit schon kennt und dann sagen soll, was für einen tisch(OP-Tisch) man dafür verwenden soll.
Das sieht so aus: Ich hab 3 Ini-Datein eine für die verschiedenen Kliniken(Gyn, Unfall etc) eine für die Tische(Vac-Matte etc) und eine in der alle bis jetzt eingegebenen Krankheiten mit dem Vorschlag als ID steht(lap. Galle->Tisch ID 2)
So, ich will also die INIs in eine Array einlesen um nur einmal die Inis auslesen zu müssen. Dann Wird ein String eingegeben: (Lap. Galle, Appendix etc)(der String besteht aus mehreren Wörter, leerzeichen etc). Dieser String wird einer Funktion übergeben. Dann beginnt eine FOR-Schleife in der das krankheits-Array abgearbeitet wird. Jeder eintrag wird geöffnet, geschaut ob die Klinik mit der eingabe übereinstimmt. Wenn nein, nächster wenn ja, dann wird der String zerlegt. immer bis zum Leerzeichen wird genommen udn geschaut ob es in der eingabe vorkommt. wenn ja, dann wird es FETT übernommen wenn nein dann normal. Sollten NULL treffer da sein wird der string verworfen, sollte MIN. ein Wort passen wird es in einer Ergebniss-Array gesaved UND dazu noch wieviele Wörter übereinstimmten.
Am ende werden alle Strings die min einen treffer hatten zurückübergeben, aber davon nur die besten 10 angezeigt. DOrt wird dann gesagt, mit 97% chance musst du Tisch XY benutzen.
Soweit verstanden was ich machen will? Habs jetzt zum ersten Mal versucht, meine Gedanken in Worte zu fassen, weil sonst macht man es ja für sich allein...
jaenicke - Mi 20.12.06 22:50
Das geht einfacher als mit einem Array. Und zwar kannst du Wertpaare wie "Galle=xyz" in einer TStringList speichern und dann darauf zugreifen. Die sortiert dir das ganze auch noch... Und laden und speichern geht mit den entsprechenden Funktionen (LoadFromFile und SaveToFile).
Kleines Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var tmp: TStringList; begin tmp := TStringList.Create; tmp.Add('aGalle=axyz'); tmp.Add('Galle=xyz'); tmp.Add('cGalle=cxyz'); ShowMessage('Galle: ' + tmp.Values['Galle']); ShowMessage('aGalle: ' + tmp.Values['aGalle']); tmp.SaveToFile(ExtractFilePath(ParamStr(0)) + '\test.txt'); tmp.Free; |
In der Datei steht dann:
Quelltext
1: 2: 3:
| aGalle=axyz Galle=xyz cGalle=cxyz |
mccom - Do 21.12.06 21:40
Vielen dank für deinen Tipp!
ich muss aber leider zugeben ich hab noch nie mit TStringList und SaveToFile gearbeitet. Sonst immer mit INI wenn ich datenbank unabhängig sein wollte. deshalb ein zwei dumme fragen:
1. In der INI kann ich ja einem Schlüssel mehrere Werte zuweisen:
[OP_ID_1]
Art=Galle XY
Tisch=TM
Klinik=Klinik XY
Short=KXY
[...]
kann ich in einer List auch mehrere Sachen verknüpft speichern? also so wie in der INI? denn da gehören ja mehrere infos zusammen...
2. kennt einer einen schon vorhandenen such algo? Also strings suchen in andere strings? So google mäßig?^^ oder muss ich das echt händisch stück für stück machen?
Danke für die Antworten!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!