在Lua中,我可以在table.insert(tableName, XYZ)
的表格內添加一個條目。有沒有辦法將已經存在的表格添加到表格中?我的意思是直接調用而不是遍歷並添加它。 謝謝將表分配給Lua中的表格
回答
在你的例子中的插入將正常工作與任何內容發生在XYZ變量(數字,字符串,表,函數等)。
雖然會插入實際的表格,但不會複製表格。如果你想插入一個表的副本,那麼你需要遍歷它並插入內容。
第一:一般來說,你做不是需要table.insert把新條目放到表中。 Lua中的表是鍵值對的集合;條目可以做出這樣的:
local t = {} --the table
local key= "name"
local value = "Charlie"
t[key] = value --make a new entry (replace an existing value at the same key!)
print(t.name) --> "Charlie"
注意關鍵可以任何類型(不僅僅是整數/字符串)!
通常情況下,您需要一個簡單的特殊情況表:值的序列(「列表」,「數組」)。對於Lua來說,這意味着你需要一個表,其中所有的鍵都是連續的整數,並且包含所有非零值。該table.insert功能非常適合那些特殊情況:它可以讓你在某個位置插入一個值(或在序列結束時,如果沒有指定位置,將其追加):
local t = {"a", "b", "d"} --a sequence containing three strings (t[1] = "a", ...)
table.insert(t, "e") --append "e" to the sequence
table.insert(t, 3, "c") --insert "c" at index 3 (moving values at higher indices)
--print the whole sequence
for i=1,#t do
print(t[i])
end
如果我明白你的意思正確,你想這樣做的:
local t1 = {1, 2, 3}
local t2 = {4, 5, 6}
some_function(t1, t2)
-- t1 is now {1, 2, 3, 4, 5, 6}
確實是有沒有辦法做到這一點不反覆t2
。這裏有一個方法來寫some_function
:
local some_function = function(t1, t2)
local n = #t1
for i=1,#t2 do t1[n+i] = t2[i] end
end
如果源表是層次表?我不知道這個層次結構會在 –
不,你必須在第二個表的鍵/值對複製到第一個表。從第二個表複製現有的值就是所謂的「淺拷貝」。第一個表格將引用與第二個表格相同的對象。
此作品在有限條件下:
local n = #t1
for i=1,#t2 do t1[n+i] = t2[i] end
它試圖將t2
元素轉移到剛剛超越現有t1
元素。這可能是一個至關重要的要求,但沒有在問題中說明。
它有幾個問題,雖然:
- 通過使用
#t1
和#t2
,它忽略不屬於正整數鍵和可錯過的整數比跳過的整數鍵更大的鍵(即從未分配或分配nil
)。 - 它使用索引器訪問第一個表,因此可以調用
__newindex
元方法。當只需要複製時,可能將不可取。 - 它使用索引器訪問第二個表,因此可以調用
__index
元方法。當只需要複製時,這不是理想的。
你可能會認爲,如果只有正整數鍵被通緝ipairs
可以使用,但它退出上找到這樣的第一nil
值可能會錯過甚至超過#t2
一樣。
使用pairs
代替:
for key, value in pairs(t2) do
rawset(t1, key, value)
end
如果你想避免更換現有t1
值當密鑰匹配或以其他方式映射,然後某種方式,在需求被定義t2
鍵。
底線:pairs
是獲取所有密鑰的方式。它有效地做了rawget
,所以它避免了調用__index
。 rawset
是在不調用__newindex
的情況下執行副本的方式。
上感謝湯姆。如果源表是層次表(表內的表)怎麼辦?我不知道會有多少層次級別存在。以上將在此工作? –
表中的每個鍵都包含對值的引用。該值可以是任何內容(除非'nil',在這種情況下密鑰被刪除),包括一個表。所以,當複製一個值時,它是對被複制的值的引用。如果該值引用內部表,則該副本將引用相同的內部表。這與你使用'table.insert'做同樣的事情。如果沒關係,那麼你就完成了。如果你想要一個「深層複製」而不是「淺層複製」,那麼在問題中以及爲什麼要這樣說。另請參閱[這裏](http://lua-users.org/wiki/CopyTable)。 –
- 1. 將追加表格分配給div
- 2. Javascript將表格分配給變量
- 3. 的Lua:在表分配
- 4. 將外部樣式表分配給html中的特定表格
- 5. 將lua表格從C++傳遞給.Lua腳本
- 6. 將值分配給列表
- 7. 將NA分配給表名
- 8. 將值分配給列表
- 9. 將NA分配給列表中的值
- 10. 如何將Lua中的表格傳遞給C++?
- 11. 如何將div分配給jQuery中的表格?
- 12. 將事件TextChanged分配給表格中的所有文本框
- 13. 在Lua中,我應該將所有表元素都分配給nil嗎?
- 14. 將錯誤值分配給谷歌電子表格單元格
- 15. 將數據表格單元格分配給一個類
- 16. Lua - 將表格轉換成逗號分隔列表
- 17. 在Symfony2表格中將過濾的實體列表分配給實體字段
- 18. 將標籤分配給PySpark中的表中的分類數據
- 19. 如何將ID分配給動態創建的HTML表格?
- 20. 將IP列表分配給Python中的開關列表
- 21. 將列表分配給該列表中的一個值
- 22. 將列表中的成員分配給另一個列表
- 23. 將屬性列表(R)分配給R中的子列表
- 24. 在Lua中複製表格
- 25. 在列表列表中的值分配給元素分配給價值
- 26. 將glob.iglob()結果分配給列表
- 27. 將id分配給正則表達式
- 28. 如何將向量分配給鏈表?
- 29. Python/Django:將值分配給列表
- 30. 將值分配給變量列表
您的意思是通過引用或按值添加現有表?如果按照意味着將內容從現有表格複製到新表格並插入該表格的值。前者在添加時不需要任何遍歷,因爲沒有進行復制。這是你的意思嗎? – greatwolf