Autor Beitrag
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 08.01.04 16:42 
Hallo,
ich möchte schauen ob in einem arrry bestimmte werte drinen stehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  test:array[0..9of integer;
begin
  for i:=0 to 50 do begin
    if i in test then .... // aber das geht leider nicht, wie geht das ???
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 260



BeitragVerfasst: Do 08.01.04 16:46 
in ist für sets und nicht für Arrays.

ausblenden 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;

//is ist zur Abfrage, von welcher Klasse ein Objekt ist:
if AOwner is TForm then
begin
end;
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 260



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 260



BeitragVerfasst: 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 :wink:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
TMyFiles = 1..99// Indexe für deine Dateien
var
Files1 : TMyFiles;
Files2 : TMyFiles;

begin
Files:= [5,3]; // Dateien 5 und 3 sind in der Menge
if [3in Files then // Abfrage, ob 3 in Menge ist
Files:= Files + [7]; // 7 hinzufügen
Files:= Files - [7,3]; // 7 und 3 wegnehmen

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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... 8)
(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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 09.01.04 20:39 
es gibt viele möglichkeiten wie man zahlen als listen abspeichen kann:
arrays
TStringListen
String
.....
:D

_________________
MFG
Michael Springwald, "kann kein englisch...."
Nightmare_82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 260



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: Sa 10.01.04 20:38 
Und warum nicht mit zwei FOR - Schleifen lösen? :wink:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var 
  test:array[0..9of integer; 
  x : integer;
begin 
  for i:=0 to 50 do
     for x := 0 to 9 begin 
         if i = Test[x]  then .... //  Funktion ausführen
     end
end;


Ups, Du hast es ja schon gelöst. ist mir ganz entgangen. :oops:
Michael.