• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Listennamen ändern ?

Archon Short

Forumsgott/göttin
Hi, aktuell habe ich in einem Projekt mehere Listen, von denen ich eine immer mal alktiv benötige.

Ist es nun möglich dies mit Hilfe eines Integers beim Listennamen zu lösen?

list L_stat_0;
list L_stat_2;


temp_list(intger i)
{
List Temp = L_stat_(und hier nun den Integer irgendwie anhängen);
}
 
Ich glaube mit den typen namen laesst sich so gesehen gar nichts anfangen, schliesslich sind die fix.
Daran habe ich mir auch schon mal die Zaehne ausgebissen.
Ich sehe nur die Moeglichkeit, die vorhandenen Listen mittels if zu wechseln.

LG
Dae
 
Ja. Das "stört" mich auch, das es keine mehrdimensionalen Arrays in LSL gibt, auf die man per Index zugreifen
kann. Ich schreibe "stört" in Anf.zeichen, weil LSL begrenzt sein muss. Solch ein riesiges Online/Echtzeitsystem
setzt Grenzen.

Ich löse das Problem prinzipiell so, wie Dae es vorschlug, per if in Form eines Verteilers.

Aber in speicherkritischen Fällen versuche ich, Listen zu umgehen und die Daten stattdessen
in Strings unterzubringen. Meiner Erfahrung nach sind Listen in Sachen Speicherverwaltung
weniger gut umgesetzt als es bei Strings der Fall ist. Und bei den Strings setze ich ggf. wieder
eine Verteiler-Technik ein.
 
Das Symbol kann man zur Laufzeit schlecht ändern. Was man bräuchte wäre eine Referenz/Zeiger auf die jeweils zu verwendende Liste. Das gibt die LSL von Haus aus aber nicht wirklich her. Das einzige was mir einfallen würde wäre eine Art der "strided lists" zu verwenden.

Also alle Einzellisten in eine große Liste packen und dann mit Hilfe einer Referenzliste, die die Startpositionen der einzelnen Teillisten enthält, auf diese Teillisten zuzugreifen.

Code:
list listIndex = [0, 3, 7, 12];
// 0 könnte man auch weglassen. Die Länge der einzelnen Listen ergibt sich aus der Differenz zwischen index(n) und index(n+1) bzw. length(data) wenn es die letzte Teilliste ist.
list listData = [COLOR="#FF0000"]["a", "b", "c"[/COLOR], [COLOR="#008000"]"hallo", "welt", "test", "blah"[/COLOR], [COLOR="#0000FF"]42, 1337, 666, 100, 33[/COLOR], [COLOR="#FF00FF"]"x", "y", "z"[/COLOR]];
// Die Teillisten sind farbig markiert

list GetStridedList(integer number)
{
    integer indexStart = llList2Integer(listIndex, number);
    integer indexEnd   = -1;
    if(number < llGetListLength(listIndex))
        indexEnd = llList2Integer(listIndex, number+1);
    return llList2List(listData, indexStart, indexEnd-1);
}

Ich weiß jetzt nicht was die ganzen StridedList Funktionen von LL alles können. z.B. ob ob sie nur mit gleich langen Teillisten umgehen können. Ansonsten müssen die Listen über eigene Funktionen Verwaltet werden. Zudem muss man halt immer darauf achten, nachdem man eine Teilliste geändert hat, diese auch wieder zurückzuschreiben.

EDIT: Das ganze lohnt sich aber nur wenn man dynamisch zur Laufzeit eine unterschiedliche Anzahl von Listen ansprechen/zuweisen möchte. Wenn die verwendeten Listen eh hardcodiert sind kommt man mit Fallunterscheidungen besser/effizienter weg.
 
Zuletzt bearbeitet:
Ok, also per if else hab ich es bisher auch immer gelöst, komme ich wohl nicht drum herum.

Ich hatte nur gehofft, daß ich da irgenwie eine Möglichkeit übersehen hab.
 
Ich habe mal versucht die Listen-Namen in eine Liste zu packen und die dann abzufragen. Da bin ich aber ziemlich schnell an die Grenzen gestossen. Ich wuesste nicht als was ich die Namen abfragen koennte, es sind ja keine Variablen wie strings, integer, floats und der gleichen.

LG
Dae
 
Zuletzt bearbeitet:
Den Versuch hatte ich gestern auch gemacht.
Stack heap....

Naja, später mal weiter an dem Projekt basteln.
Ich werde wohl ein Script nutzen, in dem ich dann die einzelnen Listen hab.
Das kann ich aus dem Hauptscript einschalten, Abfrage machen und wieder ausschalten.

Abr alles in Ruhe :)
 
Wenn das mit Strided list nicht klappt, kann man das mit if einfach realisieren. Die Zugriffsmethoden der Listen llListXXX werden in den speziell dafür erstellte Funktionen realisiert, also z.B. ein Element hinzufügen, lesen, suchen, löschen. Das belegt zwar pro Funktion etwa halbes KB Speicherplatz, aber dann steht kein haufen dieser if's im Code was mehr belegen würde.

Vorteil wäre auch, sollte es irgendwann mehr oder weniger Speicherlisten werden, sind nur diese Zugriffsfunktionen zu korrigieren und der Skritp müsste wieder gehen.
 
Codeersetzung kann LSL nicht (geht eh nur bei interpretierenden sprachen wie z.b. Perl). Zeiger oder Referenzen gibts dort auch nicht. Daher fallen die eleganten und 'billigen' Optionen weg. Es gibt einige andere Möglichkeiten z.B. indirektes Zugreifen, einen Dispatcher oder die Liste zu kopieren. Welche Lösung für Deine Anwendung nun die Beste ist, hängt von der Art der Nutzung der Listen ab (nur Lesen oder auch Ändern (wenn ja wie oft); ist die Anwendung zeitkritisch oder speicherkritisch? ... Wenn Du dazu mal was schreibst, kann ich dir was empfehlen.

Gruß

Vesta
 
Zuletzt bearbeitet:
Die Listen sind Sammlungen von Daten, die während der gesamten Laufzeit nicht verändert werden.
Ich hab es jetzt via llList2CSV und llCSV2List gelöst.
Ist bisserl aufwändiger gewesen, aber funktioniert einwandfrei.
 

Users who are viewing this thread

Zurück
Oben Unten