Type als Array ansprechen
Übersicht BlitzBasic Allgemein
hecticSieger des IS Talentwettbewerb 2006Betreff: Type als Array ansprechen |
Fr, Okt 23, 2015 13:37 Antworten mit Zitat |
|
---|---|---|
Ich benötige acht Typefelder mit jeweils unbekannter Anzahl von Einträgen. Dabei möchte ich vermeiden, dass eine riesige Liste per If AktuellerEintrag=BenötigterEintrag Then durchgearbeitet werden muss.
Gibt es eine Möglichkeit mehrere Types als Indizies (nennt man das so?) anzusprechen? Beispiel Code: [AUSKLAPPEN] Type TType[7]
Field Eins% Field Zwei% End Type Klar, man könnte einmal TType1, dann TType2 ... TType8 erstellen. Blöd ist dann aber die spätere Abfrage. Diese müsste dann auch achtmal vorhanden sein statt einmal For Liste.TType[wert]=Each TType[wert] zu schreiben. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Jan_Ehemaliger Admin |
Fr, Okt 23, 2015 14:01 Antworten mit Zitat |
|
---|---|---|
banks? | ||
between angels and insects |
hecticSieger des IS Talentwettbewerb 2006 |
Fr, Okt 23, 2015 14:25 Antworten mit Zitat |
|
---|---|---|
Das ganze soll für ein Editor sein. In diesem sollen auch Einträge wieder gelöscht werden können. Oder wie meinst du das?
Folgendes hätte ich mir vorestellt gehabt: Code: [AUSKLAPPEN] Graphics 1920,1080,0,2
SetBuffer FrontBuffer() Type TType[1] Field eins% Field zwei% End Type Local meinType.TType[1] TNew(0,101,102) TNew(0,103,104) TNew(1,201,202) TNew(1,203,204) Print "zeige nur aus 0 die werte an '100er'" For meinType.TType[0]=Each TType Print meinType\eins+" "+meinType\zwei Next Print "zeige nur aus 1 die werte an '200er'" For meinType.TType[1]=Each TType Print meinType\eins+" "+meinType\zwei Next WaitKey Function TNew%(pos%,one%,two%) Local meinType.TType[pos]=New TType meinType\eins=one meinType\zwei=two Return Handle(meinType) End Function |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Chester |
Fr, Okt 23, 2015 15:53 Antworten mit Zitat |
|
---|---|---|
Irre ich mich, oder sollte eigentlich nicht
Code: [AUSKLAPPEN] Type TType
funktionieren?
Field eins% Field zwei% End Type Local meinType[7].TType meinType[1]\eins=42 Kann es gerade nicht testen und bin mir über die Position der [] unsicher, aber iich glaub ich hatte das auch mal so ähnlich |
||
hecticSieger des IS Talentwettbewerb 2006 |
Fr, Okt 23, 2015 16:17 Antworten mit Zitat |
|
---|---|---|
Hat leider nicht geklappt. Aber das Type müsste ja in das BlitzArray gepackt werden damit es mehrere davon gibt. In deinem Beispiel gibt es ja nach wie vor nur ein Type. Hmmm. Also wenn du eine Lösung dazu hast, würde mich das freuen. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Silver_Knee |
Fr, Okt 23, 2015 18:36 Antworten mit Zitat |
|
---|---|---|
Wenn du die Liste sortierst kannst du einmal TType erstellen und dann folgendes tun:
Code: [AUSKLAPPEN] Local ersterEintrag[7].TType
Könntest jetzt 7 Dummy-Instanzen nehmen um damit die Sub-Listen zu trennen (dann musst du die bei For-Each aussortieren) oder du fügst viele !=Null-Vergleiche ein, gibst noch die listennummer jedem Objekt mit und gehst die Sub-Listen mit Until current.listennummer<>listennummer durch. Oder du ignorierst die interne Liste von BB und machst dein eigenes Dim array.TType(listeNummer,eintragNummer) das du mit For i .. For j durchgehst. |
||
XeresModerator |
Fr, Okt 23, 2015 21:47 Antworten mit Zitat |
|
---|---|---|
Das lässt sich nicht (schön/elegant) in BB lösen, weil es nur exakt eine Liste pro Type gibt.
Gib dem Type noch einen Wert "group" oder "list" und überspringe die ungewollten Werte (jede menge unnötige Schleifendurchläufe!) oder bau die komplette Listenlogik nochmal nach mit einer Mischung aus Handle, Object und Dim - oder schau ins codearchiv unter dem stichwort "collection" um das per DLL(?) nach zu rüsten. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Silver_Knee |
Fr, Okt 23, 2015 22:25 Antworten mit Zitat |
|
---|---|---|
Das mit dem Nachbauen geht auch einfacher:
Code: [AUSKLAPPEN] Type TList
Field firstElement.TListElement End Type Type TListElement Field nextElement.TListElement ... End Type ;For Each einer Liste Local l.TList=First TList;welche Liste auch immer Local current.TListElement=l.first While current ... current=current\nextElement Wend ;Insert New TListElement Before First TListElement current=new TListElement current\nextElement=l.firstElement l\firstElement=current ;Delete current=... If current\nextElement current\nextElement=current\nextElement\nextElement Endif Delete current Dabei ist zu beachten, dass die Reihenfolge in den einzelnen Listen nichts mit der Reihenfolge von For Each/Insert After Before zu tun hat. Zum durchgehen allet TListElement kann man wenn einem die Reihenfolge egal ist aber immernoch For Each nehmen. |
||
hecticSieger des IS Talentwettbewerb 2006 |
Sa, Okt 24, 2015 19:21 Antworten mit Zitat |
|
---|---|---|
ok, danke erstmal für die Vorschläge. Ich werde mir das mal die Tage zu Gemüte führen. Es ist jetzt zwar kein Weltuntergang acht Listen per Ident auszufiltern, dafür ist die Abarbeitung der Types zu schnell. Aber eine "schönere" Lösung hätte ich mir schon gewünscht. Das Beispiel von Silver_Knee prüfe ich auch noch mal durch. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht BlitzBasic Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group