字典,又称为哈希表,是一种能够快速寻找值的理想结构。Go
语言中对应的数据类型是map
,Delphi
中是TDictionary
泛型类。
声明
Delphi
uses System.Generics.Collections;
var 字典名: TDictionary<键类型, 值类型>;
Go
var 字典名 map[键类型]值类型
初始化
Delphi
字典名 := TDictionary<键类型, 值类型>.Create(初始容量);
Go
//使用make构造
字典名 = make(map[键类型]值类型, 初始容量)
//直接赋初值
字典名 = map[键类型]值类型{键1: 值1, 键2: 值2}
元素操作
Delphi
var m: TDictionary<Integer, string>;
//构造
m := TDictionary<Integer, string>.Create;
//添加元素
m.Add(1, 'abc');
m.Add(2, '123');
//取元素个数
n := m.Count;
//修改元素
m.Items[1] := 'xyz';
//取值
v := m.Items[1];
//遍历
for k in m.Keys do //遍历键
...;
for v in m.Values do //遍历值
...;
//删除元素
m.Remove(1);
//清空
m.Clear;
//释放
m.Free;
Go
var m map[int]string
//添加元素
m[1] = "abc"
m[2] = "123"
//取元素个数
n := len(m)
//修改元素
m[1] = "xyz"
//取值
v := m[1]
//遍历
for k, v := range m {
fmt.Println(k, v)
}
//删除元素
delete(1)
//清空
m = map[int]string{}
并发操作
Delphi
的TDictionary
和TObjectDictionary
在并发的应用场景下需要自己手动加锁。
Go
在并发场景下可以使用sync
包中的Map
。
//声明
var M sync.Map
//添加元素
M.Store(1, "abc")
M.Store(2, "xyz")
//取值
v, ok := M.Load(1)
//遍历
M.Range(func(k, v interface{}) bool {
fmt.Println(k, v)
return true
}) //Range函数传入的参数是固定类型的匿名函数
//删除元素
M.Delete(2)