Golang中Set数据结构的使用示例
Set是一种无序的、元素不重复的数据结构。通过使用map来实现,map中的key即为Set中的元素,value则可以用来存储某种状态(比如计数)。
Set数据结构的定义
type Set struct {
m map[interface{}]bool
}
Set数据结构的初始化
func NewSet() *Set {
return &Set{
m: make(map[interface{}]bool),
}
}
Set数据结构的操作
Add(item interface{})方法
这个方法向Set中添加元素。如果元素已经存在,则不会重复添加。
func (s *Set) Add(item interface{}) bool {
if s.Contains(item) {
return false // 元素已经存在,不需添加
}
s.m[item] = true // 对应map中的value可以表示元素的某种状态,我这里直接用bool类型表示存在
return true // 添加成功
}
Contains(item interface{})方法
这个方法判断Set中是否包含指定元素。
func (s *Set) Contains(item interface{}) bool {
_, ok := s.m[item]
return ok
}
Remove(item interface{})方法
这个方法从Set中移除指定元素。
func (s *Set) Remove(item interface{}) {
delete(s.m, item)
}
Len()方法
这个方法返回Set中元素的个数。
func (s *Set) Len() int {
return len(s.m)
}
Clear()方法
这个方法清空Set中的所有元素。
func (s *Set) Clear() {
s.m = make(map[interface{}]bool)
}
Set数据结构的使用示例1
以下是使用Set数据结构来过滤数组中的重复元素的代码示例:
func removeDuplicates(elements []interface{}) []interface{} {
set := NewSet()
result := []interface{}{}
for _, element := range elements {
if set.Add(element) {
result = append(result, element)
}
}
return result
}
如上代码所示,我们首先创建了一个Set实例set。然后我们遍历传入的元素序列,将每个元素都调用Add方法尝试添加进Set。如果Add方法返回true,则表示该元素尚未出现在Set中,我们将它加入结果集;否则,说明Set中已经包含该元素,不再需要加入结果集。
Set数据结构的使用示例2
以下是使用Set数据结构来查找两个数组中共同出现的元素的代码示例:
func findCommonElements(arr1 []interface{}, arr2 []interface{}) []interface{} {
set1, set2 := NewSet(), NewSet()
result := []interface{}{}
for _, element := range arr1 {
set1.Add(element)
}
for _, element := range arr2 {
if set1.Contains(element) && set2.Add(element) {
result = append(result, element)
}
}
return result
}
如上代码所示,我们首先创建了两个Set实例set1和set2,分别用于存储两个数组的元素。然后我们遍历第一个数组arr1,将每个元素都添加进set1。接着遍历第二个数组arr2,如果元素同时存在于set1和set2中,说明它是两个数组的共同元素,我们将它添加到结果集中。由于Set数据结构可以快速判断元素是否属于某个集合,所以该算法的时间复杂度为O(m+n),其中m、n分别为数组arr1和arr2的长度。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang中set数据结构的使用示例 - Python技术站