1. 程式人生 > >LUA 中實現table表的深拷貝例項

LUA 中實現table表的深拷貝例項

function DeepCopy( obj )	
	local InTable = {};
	local function Func(obj)
		if type(obj) ~= "table" then   --判斷表中是否有表
			return obj;
		end
		local NewTable = {};  --定義一個新表
		InTable[obj] = NewTable;  --若表中有表,則先把表給InTable,再用NewTable去接收內嵌的表
		for k,v in pairs(obj) do  --把舊錶的key和Value賦給新表
			NewTable[Func(k)] = Func(v);
		end
		return setmetatable(NewTable, getmetatable(obj))--賦值元表
	end
	return Func(obj) --若表中有表,則把內嵌的表也複製了
end

t1 = {a='a','s','d','f','g','h'}
t2 = DeepCopy(t1);  --深拷貝
t3 = t1; --淺拷貝
print(t1)
print(t2)
print(t3)
for i,v in pairs(t2) do
	print(i,v);
end

相關推薦

LUA 實現table拷貝例項

function DeepCopy( obj ) local InTable = {}; local function Func(obj) if type(obj) ~= "table" t

Lua使用table實現的其它5種數據結構

但是 else func 簡單 value 允許 pan 維數 push Lua中使用table實現的其它5種數據結構 lua中的table不是一種簡單的數據結構,它可以作為其他數據結構的基礎,如:數組,記錄,鏈表,隊列等都可以用它來表示。 1、數組 在lua中,t

結合多個例項深入理解js的拷貝和淺拷貝,多種方法實現物件的拷貝

親們為什麼要研究深拷貝和淺拷貝呢,因為我們專案開發中有許多情況需要拷貝一個數組抑或是物件,但是單純的靠=“賦值”並不會解決所有問題,如果遇到引用型別的物件改變新賦值的物件會造成原始物件也發生同樣改變,而要去除影響就必須用到深拷貝,深拷貝,對於引用物件需要進行深拷貝才會去除影響。如果是值型別直接“=”

lua使用table實現類和繼承

classname value turn () fun set urn test lua --因為只有當讀寫不存在的域時,才會觸發__index和__newindex classA = {className = "classA",name="classAInst"} f

Lua的元與元方法

類型 得到 算術 自己的 連接 還記得 clas 是否 操作符 前言Lua中每一個值都可具有元表。 元表是普通的Lua表,定義了原始值在某些特定操作下的行為。你可通過在值的原表中設置特定的字段來改變作用於該值的操作的某些行為特征。比如。當數字值作為加法的操作數時,Lua檢

lua實現倒計時

con blog oca end sta start conf child mat 今天在開發的時候,涉及到了使用倒計時來顯示。 首先自己的思路是: 1、設計顯示的Lable。 2、對傳入的時間進行處理,轉成字符串00:00:00。通過調用回調函數來控制一秒刷新一次。 轉換

【轉】.NET IL實現對象拷貝

tro 原理 htm 過程 image bcf compiler javascrip tex 對於深拷貝,通常的方法是將對象進行序列化,然後再反序化成為另一個對象。例如在stackoverflow上有這樣的解決辦法:https://stackoverflow.com/que

Lua的元(metatable)、元方法(metamethod)詳解

通過 問題 blog tro 設定 神經病 eth title 不可 在第一次看見這兩樣東西的時候,可能會覺得它很深奧,但其實很好理解,雖然實際上它可能真的很深奧。(小若:停!滾粗。) 1.知道為什麽1 + 1 = 2嗎? 為什麽在Lua中,1+1會等於2呢?(小若:難道除

random指針的單鏈拷貝(LeetCode——Copy List with Random Pointer)

指針 tco nal alt The copy list next 代碼 solution 問題: A linked list is given such that each node contains an additional random pointer which

Python復制、拷貝和淺拷貝的區別

ron 一份 謝謝 操作 完成 函數 技術 也會 python解釋器 深拷貝定義(deepcopy) 在Python中,由於一切皆對象,所以任何變量都可以被引用,也即可以被賦值給任何變量。但是在Python中,給變量賦值,是區分的,一般情況下,Python中的變量賦值都是淺

C#訪問Luatable的幾種方式

C#訪問Lua中的全域性變數 C#程式碼 luaEnv = new LuaEnv(); luaEnv.DoString("require 'CSharpCallLua'"); //獲取Lua中的全域性變數 string name = luaEnv.Global.Get<s

利用MessageChannel實現物件的拷貝

function deepClone(obj) { return new Promise(function(resolve, reject) { var { port1, port2 } = new MessageChannel(); port1.onme

C++ 拷貝例項-改變原生陣列

深拷貝 main.cpp 1 #include <stdio.h> 2 #include "IntArray.h" 3 4 int main() 5 { 6 IntArray a(5); 7 8 for(int i=0; i<a.

Lua關於table物件引用傳遞的注意事項

內容導航前言程式碼測試總結測試原始碼 前言 最近寫了挺長一段時間的Lua,發現Lua這個語言真的是很隨意,產生這種感覺的根本原因應該是它把“函式” 作為了“第一類值”,也就是說函式也可以作為變數的“值”,這使得Lua可以隨處定義函式,進而改變邏輯的走向,整個流程

MyBatis實現查詢

一、 1、Mybatis是實現多表查詢方式   1.1  業務裝配:對兩個表編寫單表查詢語句,在業務(Service)把查詢的兩表結果合併   1.2  使用Auto Mapping 特性,在實現兩表聯合查詢時通過別名完成對映   1.3  使用MyBatis<re

Js實現map和拷貝map

深拷貝和淺拷貝的區別 1.淺拷貝: 將原物件或原陣列的引用直接賦給新物件,新陣列,新物件/陣列只是原物件的一個引用 2.深拷貝: 建立一個新的物件和陣列,將原物件的各項屬性的“值”(陣列的所有元素)拷貝過來,是“值”而不是“引用” 為什麼要使用深拷貝? 我們希望

Torch 的引用、拷貝 以及 getParameters 獲取引數的探討

Preface 這段時間一直在苦練 Torch,我是把 Torch 當作深度學習裡面的 Matlab 來用了。但最近碰到個兩個坑,把我坑的蠻慘。 一個是關於 Torch 中賦值引用、深拷貝的問題,另一個是關於 getParameters() 獲取引數引發的問

(筆記)lua的元

元表的功能可以理解為為table進行一些功能的擴充套件,或者運算子的過載。mytable = {} --表 metatable = {} --元表 setmetatable(mytable,meta

java 序列化實現物件的拷貝

寫java程式碼時,經常要實現物件的clone方法,處理物件的深拷貝問題。有一種簡單的實現物件深拷貝的方法:將物件寫入到位元組流中,再讀出來即可實現深拷貝。 @SuppressWarnings("un

java程式碼實現excel下載

我這邊定義了一個類Excel,然後定義了一個初始化方法public class Ecxel {    public static HSSFFont font;public static HSSFCellStyle style;public static HSSFCellSty