![]() |
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:
Gruß
var
MyValue : Word; MyFeld : array of Word; if MyValue in MyFeld then begin //Wert vorhanden end; |
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. |
AW: Wert [Word] in Liste/Array vorhanden
Delphi-Quellcode:
Listen sind doch schon was tolles ;-)
var
test2: Tlist<Word>; Myvalue: word; //.... if test2.indexof(Myvalue) >= 0 then begin //VOrhanden end; oder muss das ein Array sein ? |
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) |
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ß |
AW: Wert [Word] in Liste/Array vorhanden
Wäre für diese Aufgabe ein
![]() |
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:
dann kannst du mit ner einfachen if abfrage schauen ob der Index größer gleich 0 ist, wenn ja ist der wert drin.
Var
DeineListeMitDenWert : TList<Word>; MyValue: Word;
Delphi-Quellcode:
if DeineListeMitDenWert.indexof(MyValue) >= 0 then
begin Showmessage('Der wert ist schon vorhanden, YOU WILL LOSE !'); end; |
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:
Grenzfälle: DynWordArr = NIL oder Length(DynWordArr) = 0
TRUE
FALSE nicht abgefangen! |
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.
|
AW: Wert [Word] in Liste/Array vorhanden
Generics gibt es in meinem DELPHI2009 nicht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz