*Luaライブラリ 要注意点 ~テーブルライブラリ~ [#d3df91d8]

**テーブル文字列連結 [#n5381312]
***table.concat (table [, sep [, i [, j]]]) [#b0374a95]

>table[i]..sep..table[i+1] ... sep..table[j] を返す。~
sep のデフォルト値は空文字列で、 i のデフォルト値は1、 j のデフォルト値はテーブルの長さである。~
i が j よりも大きい場合は空文字列を返す
#sh(lua){{
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
}}

**挿入 [#h4d15e34]
***table.insert(tbl, pos, value) [#k1b84ec4]
>tbl … テーブル型~
pos … 数値型(FIXNUM)~
value … 任意の型~

>テーブルを配列として扱う関数です。 ~
~
''値valueを持つ要素を、テーブルtblのpos番目に挿入します。~
pos番目以降の要素は一つずつ後ろにずらされます。~
posを省略したときには、要素はテーブルの最後に追加されます。'' ~
~
table.insertは戻り値を何も返しません。 ~
#sh(lua){{
t = { "A", "B" }
table.insert(t, 2, "C") -- t = { "A", "C", "B" }
table.insert(t, "D")    -- t = { "A", "C", "B", "D" }
}}
非常に高いパフォーマンスが必要な時には、~
#sh(lua){{
t[#t+1] = value
}}
のような記述の方がはるかに速い。~


**削除 [#sbaac104]
***table.remove(tbl, pos) [#jce42074]
>tbl … テーブル型~
pos … 数値型(FIXNUM)~

>テーブルを配列として扱う関数です。 ~
~
''テーブルtblからpos番目の要素を削除し、その後ろの要素を一つずつ前に詰めます。
posを省略したときには、最後の要素を削除します。''~
~
table.removeは戻り値を何も返しません。 ~
~
#sh(lua){{
t = { "A", "B", "C", "D" }
table.remove(t, 2) -- t = { "A", "C", "D" }
table.remove(t) -- t = { "A", "C" } 
}}

**ソート [#sbaac104]
***table.sort(table, comp) [#e99ec0a8]
>tbl … テーブル型~
comp … 関数型

>テーブルを配列として扱う関数です。 ~
~
テーブルtblをソートします。~
だいたい他の言語と使い方同じ。~
~
ソートの対象となるのは、tbl[1]からtbl[n](ただし、n = #tbl)です。~
compは、ソートの際の大小比較に用いる関数であり、tblの要素の値を2つ引数にとり、~
最初の引数が2番目の引数より小さかったらtrue、そうでなければfalseを返さなければなりません。~
compが省略された場合は、通常の比較演算子である<に相当する関数が使用されます。 ~
~
''ソートのアルゴリズムは安定ではありません。''~
''すなわち、値が等しいとみなせる要素が複数あったときに、ソートの前後でそれらの順序は変わっているかもしれません。 ''~
~
table.sortは戻り値を何も返しません。
~
#sh(lua){{
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
}}
**文字列の大文字・小文字を無視したソート [#u2510bf3]
>
#sh(lua){{
tbl = {"ABC", "Ebg", "DEF", "zab"}

table.sort(
    tbl,
    function (a, b) return a:lower() < b:lower() end
)
}}
**ハッシュタイプをソートする [#sad12e5e]
>
#sh(lua){{
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テーブル吐き出し
}}
**ハッシュタイプをソートする(イテレータ変数編) [#t3f28c02]
>
#sh(lua){{
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
    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