Luaライブラリ 要注意点 ~テーブルライブラリ~

テーブル文字列連結

table.concat (table [, sep [, i [, j]]])

table[i]..sep..table[i+1] ... sep..table[j] を返す。
sep のデフォルト値は空文字列で、 i のデフォルト値は1、 j のデフォルト値はテーブルの長さである。
i が j よりも大きい場合は空文字列を返す

math.randomseed(os.time())
t = {1,2,3}
print(table.concat(t) --> 123
print(table.concat(t,":")) --> 1:2:3
print(table.concat(t,"/",1,2))-->1/2

挿入

table.insert(tbl, pos, value)

tbl … テーブル型
pos … 数値型(FIXNUM)
value … 任意の型

テーブルを配列として扱う関数です。

''値valueを持つ要素を、テーブルtblのpos番目に挿入します。
pos番目以降の要素は一つずつ後ろにずらされます。
posを省略したときには、要素はテーブルの最後に追加されます。''

table.insertは戻り値を何も返しません。

t = { "A", "B" }
table.insert(t, 2, "C") -- t = { "A", "C", "B" }
table.insert(t, "D")    -- t = { "A", "C", "B", "D" }

非常に高いパフォーマンスが必要な時には、

t[#t+1] = value

のような記述の方がはるかに速い。

削除

table.remove(tbl, pos)

tbl … テーブル型
pos … 数値型(FIXNUM)

テーブルを配列として扱う関数です。

''テーブルtblからpos番目の要素を削除し、その後ろの要素を一つずつ前に詰めます。 posを省略したときには、最後の要素を削除します。''

table.removeは戻り値を何も返しません。

t = { "A", "B", "C", "D" }
table.remove(t, 2) -- t = { "A", "C", "D" }
table.remove(t) -- t = { "A", "C" } 

ソート

table.sort(table, comp)

tbl … テーブル型
comp … 関数型

テーブルを配列として扱う関数です。

テーブルtblをソートします。
だいたい他の言語と使い方同じ。

ソートの対象となるのは、tbl[1]からtbl[n](ただし、n = #tbl)です。
compは、ソートの際の大小比較に用いる関数であり、tblの要素の値を2つ引数にとり、
最初の引数が2番目の引数より小さかったらtrue、そうでなければfalseを返さなければなりません。
compが省略された場合は、通常の比較演算子である<に相当する関数が使用されます。

ソートのアルゴリズムは安定ではありません。
すなわち、値が等しいとみなせる要素が複数あったときに、ソートの前後でそれらの順序は変わっているかもしれません。

table.sortは戻り値を何も返しません。

t = { 2, 4, 3, 1 }
table.sort(t, function(a,b) return a<b end)     -- t = { 1, 2, 3, 4 }
for i, v in ipairs(t) do
	print(i, v)
end

文字列の大文字・小文字を無視したソート

tbl = {"ABC", "Ebg", "DEF", "zab"}

table.sort(
    tbl,
    function (a, b) return a:lower() < b:lower() end
)

ハッシュタイプをソートする

lines = {
    luaH_set = 10,
    luaH_get = 24,
    luaH_present = 48,
}

a = {}
for n in pairs(lines) do a[#a + 1] = n end  -- キーだけで配列化
table.sort(a)                               -- キーだけでソート
for i, n in ipairs(a) do print(n) end       -- その順番でlinesテーブル吐き出し

ハッシュタイプをソートする(イテレータ変数編)

function pairsByKeys(t, f)
    local a = {}
    for n in pairs(t) do a[#a+1] = n end
    table.sort(a, f)
    local i = 0    -- イテレータ変数
   return function () -- イテレータ変数
        i = i + 1
        return a[i], t[a[i]]
    end

   --ソート表示
    for k, v in pairsByKeys(lines) do
        print(k, v)
    end

   --ソートアルゴ変更
   for k, v in pairsByKeys(lines, function(a,b) return b<a end) do
        print(k, v)
   end
end

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-24 (日) 14:14:36 (850d)