1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
    Information ausblenden
  3. 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.
    Information ausblenden

Listennamen ändern ?

Dieses Thema im Forum "Fragen zu Scripting" wurde erstellt von Archon Short, 29. Januar 2015.

  1. Archon Short

    Archon Short Administrator Mitarbeiter

    Beiträge:
    5.195
    Zustimmungen:
    759
    Punkte für Erfolge:
    124
    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);
    }
     
  2. Daemonika Nightfire

    Daemonika Nightfire Forumsgott/göttin

    Beiträge:
    7.233
    Zustimmungen:
    174
    Punkte für Erfolge:
    63
    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
     
  3. argus Portal

    argus Portal Freund/in des Forums

    Beiträge:
    878
    Zustimmungen:
    5
    Punkte für Erfolge:
    18
    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.
     
  4. Johanna Burnstein

    Johanna Burnstein Freund/in des Forums

    Beiträge:
    749
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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: 29. Januar 2015
  5. Archon Short

    Archon Short Administrator Mitarbeiter

    Beiträge:
    5.195
    Zustimmungen:
    759
    Punkte für Erfolge:
    124
    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.
     
  6. Daemonika Nightfire

    Daemonika Nightfire Forumsgott/göttin

    Beiträge:
    7.233
    Zustimmungen:
    174
    Punkte für Erfolge:
    63
    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: 29. Januar 2015
  7. Archon Short

    Archon Short Administrator Mitarbeiter

    Beiträge:
    5.195
    Zustimmungen:
    759
    Punkte für Erfolge:
    124
    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 :)
     
  8. Jenna Felton

    Jenna Felton Superstar

    Beiträge:
    1.995
    Zustimmungen:
    58
    Punkte für Erfolge:
    64
    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.
     
  9. Vesta Pearl

    Vesta Pearl Gesperrt

    Beiträge:
    190
    Zustimmungen:
    118
    Punkte für Erfolge:
    43
    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: 30. Januar 2015
  10. Archon Short

    Archon Short Administrator Mitarbeiter

    Beiträge:
    5.195
    Zustimmungen:
    759
    Punkte für Erfolge:
    124
    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.