Archiwa tagu: Lua

MUSH Client/Lua: dobry seed do randomizacji

Lua ma tragicznie mało precyzyjny os.timer() – działa z dokładnością do jednej sekundy. Jak na generator randoma… słabo.

Po długich poszukiwaniach znalazłem jednak rozwiązanie alternatywne:

math.randomseed(tonumber(string.sub(utils.timer(),9)))

Uwaga!
To rozwiązanie działa tylko pod MUSH Clientem. Niestety ‚goła Lua’ nie ma tak skonstruowanej biblioteki utils.

Lua: Operacje na tablicach

Kolejna ściągawka składniowa.

Zadeklarowanie tablicy:

    NazwaZmiennej = {}

Zadeklarowanie tablicy z początkowymi danymi:

    NazwaZmiennej = {"tekst 1", 3, InnaTablica= {"pole w innej tablicy","drugie pole w innej tablicy"},"kolejny napis w glownej tablicy"}

Push:

    a = {}

    table.insert(a,"jakiś tekst")

 

Pop:

    table.remove(a,1)

Ile elementów ma tablica?

    print(table.getn{10,2,4})          -- 3
    print(table.getn{10,2,nil})        -- 2
    print(table.getn{10,2,nil; n=3})   -- 3
    print(table.getn{n=1000})          -- 1000

    a = {}
    print(table.getn(a))               -- 0
    table.setn(a, 10000)
    print(table.getn(a))               -- 10000

    a = {n=10}
    print(table.getn(a))               -- 10
    table.setn(a, 10000)
    print(table.getn(a))               -- 10000

inną opcją jest użycie operatora #. Ma on jednak jedną wadę! Nie liczy, tylko wyświetla wartość najwyższego indeksu:

    t = {"a", "b", "c"}
    = #t
    3

Pętla po parach w tablicy:

    t = {"a", "b", [123]="foo", "c", name="bar", "d", "e"}
    for k,v in pairs(t) do print(k,v) end
    1       a
    2       b
    3       c
    4       d
    5       e
    123     foo
    name    bar

można też wykorzystać ipairs. Gwarantuje to, że zawsze otrzymamy rekordy w poprawnej kolejności. To rozwiązanie wyświetla jednak tabelę tylko po indeksach, nie po kluczach.

    t = {"a", "b", "c"}
    for i, v in ipairs(t) do print(i, v) end
    1       a
    2       b
    3       c

Czytaj dalej Lua: Operacje na tablicach