Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Indexnummer von Textelement ermitteln (https://www.delphipraxis.net/168028-indexnummer-von-textelement-ermitteln.html)

Gargamel 1. Mai 2012 17:02

Indexnummer von Textelement ermitteln
 
Hi

Wenn man ein Array wie z.B. dieses hier hat...

Delphi-Quellcode:
var liste:array[0..9] of string;

liste[0]:='A';
liste[1]:='B';
liste[2]:='C';
liste[3]:='D';
liste[4]:='E';
liste[5]:='F';
liste[6]:='G';
liste[7]:='H';
liste[8]:='I';
liste[9]:='J';
..., ist es ja einfach, mit den Indexnummern auf den dazugehörigen Text zuzugreifen. Nun möchte ich aber genau den umgekehrten Weg gehen.
Ich will also von jedem der 10 Strings die Indexnummer ermitteln.
Der einfachste, aber für den PC aufwändigste Weg, wäre, die Liste 10x stur abzufragen. In diesem Beispiel kam ich gleich mal auf 45 Abfragen.

Wenn die Liste aber 500 (und mehr) Einträge enthält, mache ich mir doch schon Sorgen, daß die gesamte Prozedur, zeitlich gesehen, zu umfangreich ausfällt.

Hat jemand eine Idee? Hilfreich ist evtl. zu wissen, daß keiner der Strings doppelt vorkommt.

Aphton 1. Mai 2012 17:06

AW: Indexnummer von Textelement ermitteln
 
Machbar mit ner Schleife die alle Elemente durchgeht und kuckt, ob das Element gefunden wurde. Bei Fund, den Wert der Schleifenvariable als Ergebnis zurückgeben (das was du willst).

Noch ne Kleinigkeit -> All deine Elemente sind 1 Zeichen lang -> das sind keine Strings (ZeichenKETTEN) sondern Zeichen -> "Char"!

Edit: Blöd ists, wenn man keine Schleifen kennt. Da müsste man nun wirklich nen riesengroßen Codeblock schreiben, in dem alle Prüfungen stattfinden. Weiters funktioniert das auch nur mit statischen Arrays (bei beliebig großen nicht!).
Schleifen

DeddyH 1. Mai 2012 17:09

AW: Indexnummer von Textelement ermitteln
 
Sofern das Array sortiert ist, kann eine binäre Suche das Ganze auch enorm beschleunigen.

mkinzler 1. Mai 2012 17:11

AW: Indexnummer von Textelement ermitteln
 
Man könnte eine Stringliste verwenden. Diese besitzt die Methode IndexOf() um den Index eines Strings zu ermitteln. Zudem kann man in der Eigenschaft Duplicates festlegen, ob/was bei dem Versuch doppelte Einträge zu Erstellen, geschieht.

sx2008 1. Mai 2012 17:14

AW: Indexnummer von Textelement ermitteln
 
Zitat:

Zitat von Gargamel (Beitrag 1164405)
Hilfreich ist evtl. zu wissen, daß keiner der Strings doppelt vorkommt.

Ja das ist wichtig. Wenn die Strings aufsteigend sortiert sind,
dann kann man Binäre Suche oder Interpolationssuche anwenden.

Bevor du aber anfängst einen dieser Algorithmen auf dein Array umzusetzen, kann man auch gleich einen Schritt weitergehen und prüfen, ob es das nicht schon längst gibt.
Gibt es natürlich schon und wird je nach Prog-Sprache als HashMap oder Dictionary bezeichnet.
http://www.delphipraxis.net/97547-th...mentation.html

Gargamel 1. Mai 2012 19:57

AW: Indexnummer von Textelement ermitteln
 
Danke erstmal für Eure Antworten.

Ich habe etwas mit TStringList experimentiert. Das scheint genau das zu sein, wonach ich suchte. Klappt wunderbar.

Noch einen schönen Abend...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz