From e437ba87af10c7bf30d19e2229e279b43fe7b011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Tue, 7 Mar 2023 17:48:41 +0800 Subject: [PATCH] =?UTF-8?q?map=E8=BF=AD=E4=BB=A3=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=BB=88=E6=AD=A2=E8=BF=AD=E4=BB=A3=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- define.go | 4 ++-- normal.go | 5 ++++- segment.go | 9 ++++++++- sync_normal.go | 3 +-- sync_normal_test.go | 4 ++-- sync_segment.go | 9 ++++++++- 6 files changed, 25 insertions(+), 9 deletions(-) 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 } } }