diff --git a/define.go b/define.go index ca70d44..3db3d65 100644 --- a/define.go +++ b/define.go @@ -7,5 +7,5 @@ // Date : 2023-03-07 17:27 package easymap -// IteratorFunc 迭代函数 -type IteratorFunc func(key interface{}, value interface{}) +// IteratorFunc 迭代函数, 返回值为是否继续迭代,true 继续迭代 false 终止后续迭代 +type IteratorFunc func(key interface{}, value interface{}) bool diff --git a/normal.go b/normal.go index 2829552..d107d58 100644 --- a/normal.go +++ b/normal.go @@ -299,6 +299,9 @@ func (n *normal) Iterator(handleFunc IteratorFunc) { n.RLock() defer n.RUnlock() for key, val := range n.data { - handleFunc(key, val) + if !handleFunc(key, val) { + // 终止迭代 + break + } } } diff --git a/segment.go b/segment.go index aa36b66..115e65d 100644 --- a/segment.go +++ b/segment.go @@ -165,9 +165,16 @@ func (s *segment) Iterator(handleFunc IteratorFunc) { if nil == handleFunc { return } + isBreak := false for i := 0; i < s.segment; i++ { for k, v := range s.dataTable[i].GetAll() { - handleFunc(k, v) + if !handleFunc(k, v) { + isBreak = true + break + } + } + if isBreak { + break } } } diff --git a/sync_normal.go b/sync_normal.go index ce0662d..2f1da41 100644 --- a/sync_normal.go +++ b/sync_normal.go @@ -244,7 +244,6 @@ func (s *syncMap) Iterator(handleFunc IteratorFunc) { return } s.data.Range(func(key, value interface{}) bool { - handleFunc(key, value) - return true + return handleFunc(key, value) }) } diff --git a/sync_normal_test.go b/sync_normal_test.go index fd38f3b..f88fa3d 100644 --- a/sync_normal_test.go +++ b/sync_normal_test.go @@ -1,6 +1,6 @@ -// Package easymap... +// Package easymap ... // -// Description : easymap... +// Description : easymap ... // // Author : go_developer@163.com<白茶清欢> // diff --git a/sync_segment.go b/sync_segment.go index c8e3cc0..b1f112c 100644 --- a/sync_segment.go +++ b/sync_segment.go @@ -141,9 +141,16 @@ func (s *segmentSync) Iterator(handleFunc IteratorFunc) { if nil == handleFunc { return } + isBreak := false for i := 0; i < s.segment; i++ { for k, v := range s.dataTable[i].GetAll() { - handleFunc(k, v) + if !handleFunc(k, v) { + isBreak = true + break + } + } + if isBreak { + break } } }