字典,又称为哈希表,是一种能够快速寻找值的理想结构。Go语言中对应的数据类型是mapDelphi中是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{}

并发操作

DelphiTDictionaryTObjectDictionary在并发的应用场景下需要自己手动加锁。

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)
10-29 10:15