2
ルア、 配列の部分を選択したいと思います。 [1]動作 以下の例では、Pythonで第二要素ルア、配列サブ要素
a = { 1, 2, 3}
print(a)
b = {}
for i = 2, table.getn(a) do
table.insert(b, a[i])
end
print(b)
から選択します。 Luaにも同様の構文がありますか?
ルア、 配列の部分を選択したいと思います。 [1]動作 以下の例では、Pythonで第二要素ルア、配列サブ要素
a = { 1, 2, 3}
print(a)
b = {}
for i = 2, table.getn(a) do
table.insert(b, a[i])
end
print(b)
から選択します。 Luaにも同様の構文がありますか?
ルアには類似の構文がありません。しかし、独自の関数を定義してこのロジックを簡単にラップすることができます。これはbar
からfoo
内の要素の浅いコピーであることを
local function slice (tbl, s, e)
local pos, new = 1, {}
for i = s, e do
new[pos] = tbl[i]
pos = pos + 1
end
return new
end
local foo = { 1, 2, 3, 4, 5 }
local bar = slice(foo, 2, 4)
for index, value in ipairs(bar) do
print (index, value)
end
注意。
また、Luaの5.2で、あなたはtable.pack
とtable.unpack
を使用することができます。
local foo = { 1, 2, 3, 4, 5 }
local bar = table.pack(table.unpack(foo, 2, 4))
マニュアルがあるが、これは言って:
table.packを(···)
キー1、2、等とに格納されたすべてのパラメータを使用して新しいテーブルを返しますフィールドの総数が「n」のフィールドがあります。結果の表はシーケンスではないことに注意してください。
のLua 5.3はtable.move
がありますが:
local foo = { 1, 2, 3, 4, 5 }
local bar = table.move(foo, 2, 4, 1, {})
そして最後に、ほとんどは、おそらく、このオーバーOOP抽象化のいくつかの種類を定義することを選ぶでしょう。
local list = {}
list.__index = list
function list.new (o)
return setmetatable(o or {}, list)
end
function list:append (v)
self[#self + 1] = v
end
function list:slice (i, j)
local ls = list.new()
for i = i or 1, j or #self do
ls:append(self[i])
end
return ls
end
local foo = list.new { 1, 2, 3, 4, 5 }
local bar = foo:slice(2, 4)
'' 'table.getn(t)' ''私は悪い練習をしないでください。 '' '#t''を使用してください – warspyking