Autor |
Beitrag |
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 08.01.04 16:42
Hallo,
ich möchte schauen ob in einem arrry bestimmte werte drinen stehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var test:array[0..9] of integer; begin for i:=0 to 50 do begin if i in test then .... end; end; |
ich möchte nicht eine zweite procedure schreiben die das nachschaut.
ich habe mal was von in und is gehört....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Nightmare_82
      
Beiträge: 260
|
Verfasst: Do 08.01.04 16:46
in ist für sets und nicht für Arrays.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| type TColor = (clBlack, clRed, clGreen); VAR Color : set of TColor;
begin if clBlack in Color then begin end; end;
if AOwner is TForm then begin end; |
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 08.01.04 16:57
schade, ich dachte damit könnte ich es vereinfachen.... aber anscheiend leider nicht.
so bleib mir wohl nichts andres übrig als eine proc zu schreiben die das tut.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Nightmare_82
      
Beiträge: 260
|
Verfasst: Do 08.01.04 17:01
je nachdem, was du machen willst geht es mit sets.
In sets kommt jede Zahl halt nur höchstends einmal vor(es ist ja eine Menge, keine Liste). Wenn das bei dir auch so ist, kannst du es mit sets machen.
Guck einfach mal in der Hilfe.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 09.01.04 15:23
ja es bringt ja wengine 10 mal die gleiche datei löschen zu wollen.
ok dann mache ich es mal mit set könntes du/ihr mir mal ein kleines beispiel geben ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Nightmare_82
      
Beiträge: 260
|
Verfasst: Fr 09.01.04 16:09
mimi hat folgendes geschrieben: | ja es bringt ja wengine 10 mal die gleiche datei löschen zu wollen.
ok dann mache ich es mal mit set könntes du/ihr mir mal ein kleines beispiel geben ? |
Du hast ja nix von dateien gesagt
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TMyFiles = 1..99; var Files1 : TMyFiles; Files2 : TMyFiles;
begin Files:= [5,3]; if [3] in Files then Files:= Files + [7]; Files:= Files - [7,3]; |
ich habe lange nicht mit sets gearbeitet, deswegen bin ich mir bei der Syntax nicht sicher(habe hier kein Delphi) aber so in der Art sollte es gehen.
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Fr 09.01.04 18:29
Sets haben eben das Problem, daß es nicht so einfach ist zur Laufzeit Elemente dazu- oder wegzunehmen. (Hab aber mit Sets auch noch nicht so viel gearbeitet)
Denke für Dein vorhaben wäre eine TStringList sehr gut geeignet.
Da gibt es ein IndexOf() Das gibt Dir die Position des Strings innerhalb der Liste oder -1 zurück. (Funktioniert fast wie Pos().
Ausserdem gibt es Funktionen zum sortieren sowie um doppelte Einträge zu verhindern.
!! Ich mein TStringLIST; nicht TStrings !!
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 09.01.04 19:18
TStringlisten für zahlen ?
ich habe nur eine Liste die aus Zahlen bestht deshabl nehme ich einen dynamischen Array und fertig. ich dachte das man da einfach per in bzw. is nach schauen könnte ob da ein bestimmter wert drinen steht oder nicht. aber das geht ja nicht deshalb habe ich mir eine Funktion geschrieben die das kann und fertig. Aber danke für eure Mühen
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Fr 09.01.04 19:53
Ups. Stimmt ja. Du hast ja Zahlen im Array...
War irgendwie gedanklich bei den Dateinamen hängen geblieben.
Nichtsdestotrotz geht es natürlich auch mit Zahlen, die als String in der TStringList abgelegt sind...
(OK. Eine kleine Funktion die das Array durchläuft reicht ja dann vollkommen aus)
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 09.01.04 20:39
es gibt viele möglichkeiten wie man zahlen als listen abspeichen kann:
arrays
TStringListen
String
.....

_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Nightmare_82
      
Beiträge: 260
|
Verfasst: Sa 10.01.04 20:06
Wolff68 hat folgendes geschrieben: | Sets haben eben das Problem, daß es nicht so einfach ist zur Laufzeit Elemente dazu- oder wegzunehmen. (Hab aber mit Sets auch noch nicht so viel gearbeitet)
|
hast du meinen Code gelesen? Was ist daran nicht einfach?
Und der Vorteil von sets ist, sie vebrauchen wenig Speicher, der Vergleich geht sauschnell, ebenso wie das Hinzufügen und Wegnehmen von Elementen, da es alles nur Bitoperationen wie or und and sind.
Eine String-List ist so zeimlich das langsamste, was du für dieses Problem nehmen kannst.
@mimi : Wieso willst du keine sets nehmen? Die können doch alles was du brauchst?!
|
|
Michael Stenzel
      
Beiträge: 133
D3 Prof, D7 PE
|
Verfasst: Sa 10.01.04 20:38
Und warum nicht mit zwei FOR - Schleifen lösen?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var test:array[0..9] of integer; x : integer; begin for i:=0 to 50 do for x := 0 to 9 begin if i = Test[x] then .... end; end; |
Ups, Du hast es ja schon gelöst. ist mir ganz entgangen.
Michael.
|
|