Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:reference:standard_library:table:remove

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

scripting:reference:standard_library:table:remove [2025/07/15 14:53] – angelegt fritz_98scripting:reference:standard_library:table:remove [2025/07/15 16:00] (aktuell) fritz_98
Zeile 52: Zeile 52:
  
  
 +Wenn du innerhalb einer Schleife numerische Einträge aus einem Table entfernen möchtest, muss diese Schleife das Table **rückwärts** durchlaufen! Das hat folgenden Grund: Wenn mit ''table.remove'' Einträge aus einer Liste gelöscht werden, rücken die Einträge dahinter nach, um die entstandene Lücke zu füllen (die nachfolgenden Indizes werden also alle um 1 reduziert). Würden wir wie gewohnt vorwärts iterieren und ein Element an Stelle ''i'' löschen, würde das darauf folgende Element auf Stelle ''i'' vorrücken. Da die Iteration aber bei ''i+1'' weiter geht, hätten wir dadurch ein Element übersprungen. Rückwärts kann das nicht passieren, da das Element an Index ''i-1'' von ''table.remove'' nicht beeinflusst wird.
  
-Beispiele: Sieb des Eratosthenes, irgendwas mit foreachi, gemeinsames Beispiel mit insert+Wir geben darum ein Beispiel, wie ein Table "gefiltert" werden kann, indem nacheinander Werte daraus entfernt werden, die ein bestimmtes Kriterium erfüllen. Anschaulich soll das am [[https://de.wikipedia.org/wiki/Sieb_des_Eratosthenes|Sieb des Eratosthenes]] gezeigt werden. Dadurch werden wir ein Table erhaltendas bis zu einem gegebenen Maximalwert alle Primzahlen enthält: 
 +<code lua> 
 +MaxNumber = 100
  
 +-- Das Table, das zum Schluss nur noch Primzahlen enthalten soll, wird mit allen Zahlen
 +-- von 2 bis MaxNumber initialisiert
 +-- siehe auch table.insert
 +Primes = {}
 +for i = 2, MaxNumber do
 +    table.insert(Primes, i)
 +end
 +
 +PrimeIndex = 1
 +-- So lange, bis wir am Ende der Liste ankommen...
 +while PrimeIndex < table.getn(Primes) do
 +    -- ... werden alle Zahlen entfernt, die ein Vielfaches der Zahl am PrimeIndex sind
 +    -- Beachte die rückwärtszählende Schleife
 +    for i = table.getn(Primes), 1, -1 do
 +        -- Entferne die Zahl, wenn sie größer als die betrachtete Zahl ist und ein ganzzahliges
 +        -- Vielfaches ist
 +        if (Primes[i] > Primes[PrimeIndex]) and (math.mod(Primes[i], Primes[PrimeIndex]) == 0) then
 +            table.remove(Primes, i)
 +        end
 +    end
 +    PrimeIndex = PrimeIndex + 1
 +end
 +</code>
 +**Hinweis:** Das oben ist keine effiziente Implementierung vom Sieb des Eratosthenes und dient nur als Beispiel.\\
 +
 +
 +Für ein Weiteres Beispiel siehe den Artikel zu [[scripting:reference:standard_library:table:insert|table.insert]].
 ---- ----
  
Zeile 60: Zeile 90:
  
   * [[scripting:reference:standard_library:base:tostring|tostring (_Value)]]   * [[scripting:reference:standard_library:base:tostring|tostring (_Value)]]
 +  * [[scripting:reference:standard_library:table:insert| table.insert (_Table, [_Index,] _Value)]]
 +  * [[scripting:reference:standard_library:math:mod|math.mod (_a, _b)]]
scripting/reference/standard_library/table/remove.1752591194.txt.gz · Zuletzt geändert: 2025/07/15 14:53 von fritz_98