Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Wert [Word] in Liste/Array vorhanden (https://www.delphipraxis.net/178134-wert-%5Bword%5D-liste-array-vorhanden.html)

Alex_ITA01 19. Dez 2013 10:05

Wert [Word] in Liste/Array vorhanden
 
Hallo zusammen,
folgende Aufgabe:

Ich habe eine Variable vom Typ Word und möchte wissen, ob diese in einer bestimmten dynamisch langen Liste/Array vorhanden ist. Ich will nix sortieren oder sonst etwas. Nur wissen ob vorhanden.
Wie das geht, weiß ich.
Ich möchte eigentlich nur wissen, was wohl die eleganteste/schnellste Lösung von euch wäre?

Meine Lösungswege:

1)
Stringliste mit Aufnahme von den ganzen Einträgen als Integer. Meine Variable mit StringListe.IndexOf abfragen
2)
array of Integer und dieses bei der Abfrage durchsuchen

Habt ihr noch andere Ansätze?

Oder gibt es vielleicht sowas wie:
Delphi-Quellcode:
var
  MyValue : Word;
  MyFeld : array of Word;

if MyValue in MyFeld then
begin
  //Wert vorhanden
end;
Gruß

Neutral General 19. Dez 2013 10:16

AW: Wert [Word] in Liste/Array vorhanden
 
Methode 2 ist die einzig sinnvolle.
Die Stringliste macht intern nichts anderes als die Liste zu durchlaufen und nach dem String zu schauen der bei IndexOf angegeben wurde. Und Strings zu vergleichen ist sogar aufwendiger als Zahlen.

Brauchst ne einfache Funktion in der du per for-schleife dein Array nach dem Wert durchsuchst.

Mokus 19. Dez 2013 10:26

AW: Wert [Word] in Liste/Array vorhanden
 
Delphi-Quellcode:
var
      test2: Tlist<Word>;
      Myvalue: word;


//....

if test2.indexof(Myvalue) >= 0 
then
begin
//VOrhanden
end;
Listen sind doch schon was tolles ;-)

oder muss das ein Array sein ?

himitsu 19. Dez 2013 10:36

AW: Wert [Word] in Liste/Array vorhanden
 
Der IN-Operator geht nur für Byte (0..255), weshalb er auch nicht mehr für Unicode funktioniert. :zwinker:

Es gibt eine InArray-Suchfunktion für integer, aber ich weiß grade nicht wie die heißt und ob die in D2006 schon drin war. (mal in der Unit Math oder SysUtils suchen)

Alex_ITA01 19. Dez 2013 10:38

AW: Wert [Word] in Liste/Array vorhanden
 
Also es muss kein Array sein...

Ich nutze XE4, vielleicht gibts da ja eine entsprechende Funktion?!

Eigentlich ist Integer auch nicht das richtige Format. Word reicht vollkommen, da es nur positive Zahlen von 0 bis max 9999 enthalten kann.

Gruß

jfheins 19. Dez 2013 10:45

AW: Wert [Word] in Liste/Array vorhanden
 
Wäre für diese Aufgabe ein THashSet<T> nicht geeigneter?

Mokus 19. Dez 2013 11:05

AW: Wert [Word] in Liste/Array vorhanden
 
ich würde die Unit ; "Generics.Collections" einbinden,
dir ne Liste erstellen die die nur Daten von Typ word aufnehmen kann, somit hast du eine Sicherheit, was in deiner Liste kommt, und musst
nicht noch erst schauen das es wirklich der richtige typ ist.

Delphi-Quellcode:
Var
DeineListeMitDenWert : TList<Word>;
MyValue: Word;
dann kannst du mit ner einfachen if abfrage schauen ob der Index größer gleich 0 ist, wenn ja ist der wert drin.

Delphi-Quellcode:
if DeineListeMitDenWert.indexof(MyValue) >= 0 then
begin
Showmessage('Der wert ist schon vorhanden, YOU WILL LOSE !');
end;

Aphton 19. Dez 2013 11:10

AW: Wert [Word] in Liste/Array vorhanden
 
Delphi-Quellcode:
function DynWordArrContainsWord(const dynWordArr; value: Word): LongBool;
asm
  MOV  EDI, [EAX]
  MOV  ECX, [EDI-4]
  INC  ECX
  MOV  AX, DX
  REPNZ SCASW
  XCHG EAX, ECX
end;

// --

procedure main();
var
  i: Integer;
  a: Array of Word;
begin
  SetLengtH(a, 100);
  for i := 0 to high(a) do a[i] := i;
  writeln(DynWordArrContainsWord(a, 99));
  writeln(DynWordArrContainsWord(a, 100));
  readln;
end;
Code:
TRUE
FALSE
Grenzfälle: DynWordArr = NIL oder Length(DynWordArr) = 0
nicht abgefangen!

DeddyH 19. Dez 2013 12:21

AW: Wert [Word] in Liste/Array vorhanden
 
Wenn die im Profil angegebene Delphi-Version noch stimmt, fallen Generics eh unter den Tisch, da es die erst ab Delphi 2009 gibt.

hathor 19. Dez 2013 12:29

AW: Wert [Word] in Liste/Array vorhanden
 
Generics gibt es in meinem DELPHI2009 nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Seite 1 von 3  1 23      

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