map增加迭代实现 #1

Merged
zhangdeman merged 1 commits from feature/iterator into master 2023-03-07 17:34:43 +08:00
6 changed files with 71 additions and 0 deletions

View File

@ -34,4 +34,6 @@ type EasyMap interface {
Exist(key interface{}) bool Exist(key interface{}) bool
GetAll() map[interface{}]interface{} GetAll() map[interface{}]interface{}
GetAllForMapKeyString() map[string]interface{} GetAllForMapKeyString() map[string]interface{}
// Iterator 对数据的迭代
Iterator(IteratorFunc)
} }

11
define.go Normal file
View File

@ -0,0 +1,11 @@
// Package easymap ...
//
// Description : easymap ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2023-03-07 17:27
package easymap
// IteratorFunc 迭代函数
type IteratorFunc func(key interface{}, value interface{})

View File

@ -286,3 +286,19 @@ func (n *normal) GetAllForMapKeyString() map[string]interface{} {
} }
return finalData return finalData
} }
// Iterator ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 17:32 2023/3/7
func (n *normal) Iterator(handleFunc IteratorFunc) {
if nil == handleFunc {
return
}
n.RLock()
defer n.RUnlock()
for key, val := range n.data {
handleFunc(key, val)
}
}

View File

@ -155,3 +155,19 @@ func (s *segment) GetAllForMapKeyString() map[string]interface{} {
} }
return finalData return finalData
} }
// Iterator ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 17:32 2023/3/7
func (s *segment) Iterator(handleFunc IteratorFunc) {
if nil == handleFunc {
return
}
for i := 0; i < s.segment; i++ {
for k, v := range s.dataTable[i].GetAll() {
handleFunc(k, v)
}
}
}

View File

@ -233,3 +233,18 @@ func (s *syncMap) GetAllForMapKeyString() map[string]interface{} {
} }
return finalData return finalData
} }
// Iterator 迭代数据
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 17:27 2023/3/7
func (s *syncMap) Iterator(handleFunc IteratorFunc) {
if nil == handleFunc {
return
}
s.data.Range(func(key, value interface{}) bool {
handleFunc(key, value)
return true
})
}

View File

@ -136,3 +136,14 @@ func (s *segmentSync) GetAllForMapKeyString() map[string]interface{} {
} }
return finalData return finalData
} }
func (s *segmentSync) Iterator(handleFunc IteratorFunc) {
if nil == handleFunc {
return
}
for i := 0; i < s.segment; i++ {
for k, v := range s.dataTable[i].GetAll() {
handleFunc(k, v)
}
}
}