Go中使用Set

Go中使用Set

st := make(map[string]struct{})

// add element
st["hello"] = struct{}{}

这段代码包含了两行,分别是:

st := make(map[string]struct{})

st["hello"] = struct{}{}

我们一行一行地解析它们的含义:

1. st := make(map[string]struct{})

这一行代码的作用是创建一个空的 map,其中 map 的键类型为 string,值类型为 struct{}(空结构体)。

解释:
  • make(map[string]struct{})make 是 Go 中的内建函数,用来分配内存并初始化某些数据结构。这里它初始化了一个 map,键的类型是 string,值的类型是 struct{}(一个没有字段的空结构体)。

  • map[string]struct{}:这是一个映射(字典),其键是字符串类型(string),值是空结构体类型(struct{})。空结构体(struct{})没有字段,因此它不占用任何内存,只是用来表示某个元素的存在性。我们通常利用它来模拟集合(set),因为它不存储数据,仅仅表示“键是否存在”。

因此,st 变量是一个空的 map,它用来存储唯一的 string 键,并且不关心这些键的值(只关心它们是否存在)。这种用法在模拟集合(set)时非常有用。

2. st["hello"] = struct{}{}

这一行代码的作用是向 map 中添加一个键值对,其中键是 "hello",值是一个空结构体 struct{}{}

解释:
  • st["hello"]:这是对 map 中键 "hello" 的引用。通过这个操作,Go 会在 map 中查找键 "hello",如果它存在则更新值,如果不存在则添加该键值对。

  • struct{}{}:这是一个空结构体的字面量。struct{} 是一种类型,它没有字段,不占用内存。在这里,struct{}{} 表示 map 中键 "hello" 对应的值。虽然这个值为空结构体,但它表示“存在”这一事实。

所以,st["hello"] = struct{}{} 的意思是:st 这个 map 中添加键 "hello",并将值设置为一个空结构体 struct{}{},表示 "hello" 这个键存在。由于空结构体没有实际内容,它只是用来表示键 "hello" 的存在性。

为什么要使用空结构体 struct{}{}

  1. 节省内存: 空结构体在 Go 中不占用任何内存空间(它的大小是 0 字节)。因此,当你不需要存储任何与键相关的额外数据时,可以使用空结构体来节省内存。

  2. 表示存在性: 使用 struct{}{} 作为值,意味着我们关心的是某个键是否存在,而不需要存储任何额外的信息。例如,在模拟集合时,map 中的每个键都是唯一的,空结构体的值只起到“存在”的标记作用。

代码总结:

  • st := make(map[string]struct{}):创建了一个空的 map,它的键是字符串类型,值是空结构体类型,用来表示集合。
  • st["hello"] = struct{}{}:向这个 map 中添加了一个键 "hello",并将值设置为一个空结构体,表示键 "hello" 存在。

通过这种方式,map 的键 "hello" 被添加到集合中,但不存储任何额外的信息,仅仅表示该键的存在性。这种方式常用于实现集合(set)的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值