map增加迭代实现 #1
@ -34,4 +34,6 @@ type EasyMap interface {
|
||||
Exist(key interface{}) bool
|
||||
GetAll() map[interface{}]interface{}
|
||||
GetAllForMapKeyString() map[string]interface{}
|
||||
// Iterator 对数据的迭代
|
||||
Iterator(IteratorFunc)
|
||||
}
|
||||
|
11
define.go
Normal file
11
define.go
Normal 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{})
|
16
normal.go
16
normal.go
@ -286,3 +286,19 @@ func (n *normal) GetAllForMapKeyString() map[string]interface{} {
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
16
segment.go
16
segment.go
@ -155,3 +155,19 @@ func (s *segment) GetAllForMapKeyString() map[string]interface{} {
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -233,3 +233,18 @@ func (s *syncMap) GetAllForMapKeyString() map[string]interface{} {
|
||||
}
|
||||
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
|
||||
})
|
||||
}
|
||||
|
@ -136,3 +136,14 @@ func (s *segmentSync) GetAllForMapKeyString() map[string]interface{} {
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user