# Map类型

Map<T>类型是内置的一个基本类型,表示哈希表。

字面量语法是{}表示空Map<T>,也可以用形如 { key1 = value1, key2 = value2, key3: value3, ['key4'] = value4, 'key5': value5, ... }的形式初始化一个table值。

Map<T>可以用点操作符或者中括号的方式修改和查询其中某个索引的值,比如:

let a = { name='glua', age=1 }      -- 因为'glua'和1的类型不一样,a变量的类型自动推导为Map<object>类型
let a1 = { name: 'glua', age: 1 }   -- 这里a1和a两种初始化Map的方式等价
let a2 = { name: 'glua', address: 'China' }   -- 因为'glua'和'China'的类型都是string,所以a2变量的类型自动推导为Map<string>
let a3 = {name: 'glua', 'age': 1 }   -- 这种方式和a,a1等价
a['abc'] = 'China'    -- 给a插入/修改索引’abc’对应的值
a.abc = 'China'    -- 效果同a['abc'] = 'China'
let b1 = a.name     -- 读取a的'name'索引对应的值赋值给新变量b1
let b2 = a['name']    -- 同 let b2 = a.name

Map<T>类型的值的增删改查可以使用内置模块table模块来操作

例如:

var a = {name='glua'}
let b1 = a.name  -- 获取哈希表a中的'name'这个key映射的值
let b2 = a['name']  -- 获取哈希表a中的'name'这个key映射的值的另一种方式
a.name = 'China'  -- 修改或增加哈希表a中'name'这个key映射为'China'
a['name'] = 'China'  -- 修改或增加哈希表a中'name'这个key映射为'China'的另一种方式
var k: string, v: string = '', ''
for k, v in pairs(a) do
    pprint(k, v)  -- 遍历哈希表a,k和v分别是哈希表a的每一项的key和value
end