lua中table鍵類型及lua中table的初始化有幾種方式

在 Lua 中,table 的鍵幾乎可以是任何類型,但有幾個重要的規則和最佳實踐需要了解。

1. 主要鍵類型

(1)?字符串 (string)

這是最常見、最推薦的鍵類型。

local person = {name = "Alice", -- 等同于 ["name"] = "Alice"["age"] = 30    -- 當鍵名復雜時,必須用方括號
}
(2)?數字 (number)

數字鍵通常用于實現 “數組”。Lua 數組默認從索引?1?開始。

local fruits = {"apple", "banana"} -- fruits[1], fruits[2]
fruits[100] = "orange" -- 也可以使用任意數字作為鍵

???注意:數字?0?也是一個有效的鍵,但它不屬于默認的數組部分。

(3)?布爾值 (boolean)

布爾值?true?和?false?也可以作為鍵。

local settings = {[true] = "開啟狀態",[false] = "關閉狀態"
}
(4)?表 (table) / 函數 (function) / 用戶數據 (userdata)

這些都是 “引用類型”,只有當它們是同一個對象時,才會被視為同一個鍵。

local t1 = {}
local t2 = {}
local t3 = t1local cache = {[t1] = "這是t1",[function() end] = "這是一個匿名函數"
}print(cache[t3]) -- 輸出 "這是t1",因為 t3 和 t1 是同一個表
print(cache[t2]) -- 輸出 nil,因為 t2 是另一個不同的表

2. 兩個關鍵規則

  1. nil?鍵是無效的
    將?nil?賦值給一個鍵會刪除該鍵值對。

    local t = {key = "value"}
    t.key = nil -- t 現在變成了空表 {}
    
  2. 數字?0?和字符串?"0"?是不同的鍵
    Lua 會區分鍵的類型。

    local t = {[0] = "數字0", ["0"] = "字符串0"}
    print(t[0])     -- 輸出 "數字0"
    print(t["0"])   -- 輸出 "字符串0"
    

3. 遍歷與鍵類型

不同的遍歷方式會處理不同類型的鍵:

  • ipairs: 只遍歷連續的、從 1 開始的數字鍵
  • pairs: 遍歷所有類型的鍵(除了?nil)。

總結與建議

鍵類型描述推薦場景
字符串最常用,可讀性好,性能穩定首選。用于表示配置、對象屬性等。
數字用于實現數組和有序列表需要按順序訪問一組數據時使用。
布爾值只有兩個可能的值適用于簡單的二態配置。
引用類型(表 / 函數等)用作臨時緩存的鍵高級用法,如實現備忘錄模式或對象唯一標識。

在 Lua 中初始化 table 主要有以下幾種方式,從簡單到復雜排列:

1. 創建空表

最基礎的方式,創建一個沒有任何元素的 table。

local t = {}

2. 列表式初始化

用于創建數組或線性表,索引會自動從 1 開始遞增。

local fruits = {"apple", "banana", "orange"}
-- fruits[1] = "apple", fruits[2] = "banana"

3. 鍵值對式初始化

用于創建字典或映射,可以自定義任何類型的鍵(通常是字符串)。

local person = {name = "Alice",age = 30,isStudent = false
}
-- 等同于 person["name"] = person.name = "Alice"

4. 混合初始化

在一個 table 中同時包含列表部分和鍵值對部分。

local data = {-- 列表部分"Lua", "Python", "JavaScript",-- 鍵值對部分creator = "Guido van Rossum", -- 注意:這里是個小陷阱!rating = 9.5
}

?? 重要陷阱:在混合初始化中,所有列表項的自動索引會在所有鍵值對之前被分配。上面的例子中,data[1] = "Lua", data[2] = "Python", data[3] = "JavaScript"。

5. 計算式初始化

在初始化時,用方括號 [] 來包裹表達式,動態計算鍵名。這對于使用非字符串作為鍵或動態生成鍵名非常有用。

local key_name = "score"
local config = {["player-id"] = 12345, -- 使用特殊字符的字符串鍵[key_name] = 90,       -- 使用變量作為鍵[os.time()] = "start"  -- 使用函數調用結果作為鍵
}

6. 構造函數式初始化

通過在 table 構造器中調用函數,可以在創建 table 的同時執行復雜的初始化邏輯。

local function build_user(id)return {id = id,token = "token_" .. id}
endlocal user = build_user(101)
-- user = { id = 101, token = "token_101" }


這些初始化方式是 Lua 中非常基礎且重要的知識點。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96193.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96193.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96193.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

matlab實現利用雙MZI產生RZ33-QPSK信號

利用MATLAB實現雙MZI產生RZ33-QPSK信號的代碼: 參數設置 % 信號參數 fs 1e6; % 采樣頻率 fc 10e6; % 載波頻率 T 1e-6; % 符號周期 N 1000; % 采樣點數 t 0:1/fs:(N-1)/fs; % 時間向量生成QPSK信號 % 生成隨機二進制序列 data randi([0,1],1,N);% 將二進制序列…

Vue響應式更新 vs React狀態更新:兩種范式的底層邏輯與實踐差異

在現代前端框架中,Vue和React作為兩大主流選擇,分別采用了截然不同的狀態管理與更新機制。Vue的“響應式更新”通過自動追蹤依賴實現數據與視圖的聯動,而React的“狀態更新”則依賴顯式setState觸發重新渲染。本文將從底層原理、更新流程、優…

Spring MVC 的常用注解

一、控制器相關注解ControllerController注解用于標記一個類為 Spring MVC 的控制器。在 Spring MVC 框架里,控制器扮演著關鍵角色,負責接收 HTTP 請求并返回響應。當一個類被Controller注解標記后,Spring 容器會自動識別并將其納入管理。例如…

Oracle APEX 利用卡片實現翻轉(方法一)

目錄 0. 以 Oracle 的標準示例表 EMP 為例,實現卡片翻轉 1. 創建PL/SQL動態內容區域 2. 添加 CSS 實現翻轉效果 3. 添加動態操作 (Dynamic Action) 4. 看效果 0. 以 Oracle 的標準示例表 EMP 為例,實現卡片翻轉 正面: 顯示員工姓名 (EN…

Gradio全解11——Streaming:流式傳輸的視頻應用(1)——FastRTC:Python實時通信庫

Gradio全解11——Streaming:流式傳輸的視頻應用(1)——FastRTC:Python實時通信庫前言第11章 Streaming:流式傳輸的視頻應用11.1 FastRTC:Python實時通信庫11.1.1 WebRTC協議與FastRTC介紹1. WebRTC協議的概…

一文學會二叉搜索樹,AVL樹,紅黑樹

文章目錄二叉搜索樹查找插入刪除AVL樹概念插入旋轉AVL驗證紅黑樹概念插入檢測二叉搜索樹 也稱二叉排序樹或二叉查找樹 二叉搜索樹:可以為空,若不為空滿足以下性質 ?1,非空左子樹小于根節點的值 ?2,非空右子大于根節點的值 ?3…

Android實戰進階 - 啟動頁

場景:當啟動頁處于倒計時階段,用戶將其切換為后臺的多任務卡片狀態,倒計時會繼續執行,直到最后執行相關邏輯(一般會跳轉引導頁、進入主頁等) 期望:而綜合市場來看,一般我們期望的是當…

無標記點動捕技術:重塑展廳展館的沉浸式數字交互新時代

在元宇宙浪潮的持續推進下,虛擬數字人正逐漸成為連接虛實世界的重要媒介。在展廳展館中,數字人不僅能夠扮演導覽員、講解員角色,更可通過情感化交互提升參觀體驗,使文化傳播更具感染力和沉浸感。虛擬人的引入,為傳統展…

輕松Linux-7.Ext系列文件系統

天朗氣清,惠風和煦,今日無事,遂來更新。 1.概述 總所周知,我們存的數據都是在一個叫硬盤的東西里面,這個硬盤又像個黑盒,這章就來簡單解析一下Linux中文件系統。 現在我們用的大都是固態硬盤,…

Matlab機器人工具箱使用4 蒙特卡洛法繪制工作區間

原理:利用rand隨機數,給各個關節設置隨機關節變量,通過正運動學得到末端位姿變換矩陣,然后利用變換矩陣2三維坐標標記出末端坐標,迭代多次就可以構成點云。教程視頻:【MATLAB機器人工具箱10.4 機械臂仿真教…

【項目】在AUTODL上使用langchain實現《紅樓夢》知識圖譜和RAG混合檢索(三)知識圖譜和路由部分

首先在數據集 - 開放知識圖譜下載紅樓夢的知識圖譜,這個網站上有各種各樣的知識圖譜,可以挑你感興趣的做( ? ?ω?? ) 這個知識圖譜的作者們已經將三元組抽取出來了,我們可以直接用,如果你對三元組是如何生成的感興趣&#xf…

pycharm 最新版上一次編輯位置

2025nipycharm方法一:用快捷鍵(最方便)跳回上一次編輯位置:Windows/Linux: Ctrl Alt ←macOS: ? Option ←跳到前一次位置:Windows/Linux: Ctrl Alt →macOS: ? Option →方法二:顯示工具欄按鈕在…

前端性能監控與優化:從 Lighthouse 到 APM

在當今競爭激烈的數字環境中,用戶對Web應用性能的要求日益提高。一個緩慢或響應遲鈍的應用不僅會流失用戶,更可能損害品牌形象和商業價值。因此,前端性能的監控與優化已成為前端開發不可或缺的關鍵環節。本文將深入探討從基礎的性能評估工具L…

TC_Motion多軸運動-電子齒輪

目錄 電子齒輪 【基本概念】 【應用示例】 【開發總結】 END 電子齒輪 【基本概念】 定義:通過軟件方法實現機械齒輪的速比調節功能(兩個軸成線性比例旋轉) 優點 免維護,告別機械損耗 易調節,任意修改齒輪比 精度高,無機械背隙 應用場景 多臺電機拖動同一負載,要求多臺…

CentOS 7 下載教程

訪問阿里云鏡像站 阿里巴巴開源鏡像站 選擇centos 點這個 選擇7版本 進入isos目錄 點這個 選擇這個版本 因為這個鏡像的日期更新 推薦下載 DVD 版:包含完整系統和常用軟件,無需額外聯網安裝組件Minimal 版:精簡版,僅包含基礎系…

MAC在home下新建文件夾報錯“mkdir: test: Operation not supported”

在Mac電腦中,home文件夾下不能直接mkdir,sudo 也還是不行,提示“mkdir: test: Operation not supported”。網上找的解決方案不好使,因為沒有關閉系統完整性保護關閉系統完整性保護查看SIP當前的狀態csrutil status如果是開啟狀態…

交叉導軌從測試儀到工作臺的精密運動控制

在精密儀器領域微米級的運動精度與納米級的穩定性往往是決定設備性能上限的核心指標。而支撐這一技術鴻溝跨越的,往往隱匿于機械結構的“毫厘之間”——交叉導軌。以下是其在不同精密儀器中的具體應用:光學測試儀:光學測試儀主要用于各種高精…

內網穿透的應用-Navidrome與cpolar本地搭建跨網絡訪問的云音樂服務器

文章目錄前言1. 安裝Docker2. 創建并啟動Navidrome容器3. 公網遠程訪問本地Navidrome3.1 內網穿透工具安裝3.2 創建遠程連接公網地址3.3 使用固定公網地址遠程訪問前言 音樂收藏存在平臺版權限制、音質壓縮和訪問不便等問題。Navidrome 開源音樂服務器與 cpolar 內網穿透服務的…

FastAPI 訪問不了API文檔或配置不生效的解決方法

FastAPI中文教程 本文背景 FastAPI框架自帶交互式api文檔,通過路由/docs或者/redoc 訪問,但是FastAPI 的文檔界面(如 /docs 和 /redoc)依賴于外部的 JavaScript 和 CSS 庫,如果項目部署環境網絡不佳或者無法訪問外網的時候&…

IAR 集成開發環境入門指南:字體設置與調試實戰

一、IAR 的基本使用教程1. IAR 顏色字體大小設置打開設置路徑:點擊頂部菜單欄 Tools → 選擇 Options,打開 IDE 配置窗口。進入字體顏色設置界面:在彈出的 “IDE Options” 窗口中,雙擊展開 Editor 選項,然后點擊 Colo…