| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- // Author: simon (ynwdlxm@163.com)
- // Date: 2025/9/15 17:07
- // Desc:
- package dict
- import (
- "sync"
- )
- type SyncDict struct {
- m sync.Map
- }
- func (s *SyncDict) Get(key string) (any, bool) {
- value, ok := s.m.Load(key)
- return value, ok
- }
- func (s *SyncDict) Len() int {
- length := 0
- s.m.Range(func(key, value any) bool {
- length++
- return true
- })
- return length
- }
- func (s *SyncDict) Put(key string, value any) (result int) {
- _, ok := s.m.Load(key)
- s.m.Store(key, value)
- if ok {
- result = 0
- } else {
- result = 1
- }
- return
- }
- func (s *SyncDict) PutIfAbsent(key string, value any) (result int) {
- _, ok := s.m.Load(key)
- if ok {
- return 0
- }
- s.m.Store(key, value)
- return 1
- }
- func (s *SyncDict) PutIfExists(key string, value any) (result int) {
- _, ok := s.m.Load(key)
- if ok {
- s.m.Store(key, value)
- return 1
- }
- return 0
- }
- func (s *SyncDict) Remove(key string) (result int) {
- _, ok := s.m.Load(key)
- if ok {
- s.m.Delete(key)
- return 1
- }
- return 0
- }
- func (s *SyncDict) ForEach(consumer Consumer) {
- s.m.Range(func(key, value any) bool {
- consumer(key.(string), value)
- return true
- })
- }
- func (s *SyncDict) Keys() []string {
- result := make([]string, s.Len())
- s.m.Range(func(key, value any) bool {
- result = append(result, key.(string))
- return true
- })
- return result
- }
- func (s *SyncDict) RandomKeys(limit int) []string {
- result := make([]string, limit)
- for i := 0; i < limit; i++ {
- s.m.Range(func(key, value any) bool {
- result[i] = key.(string)
- return false
- })
- }
- return result
- }
- func (s *SyncDict) RandomDistinctKeys(limit int) []string {
- result := make([]string, limit)
- i := 0
- s.m.Range(func(key, value any) bool {
- result[i] = key.(string)
- i++
- return i < limit // 如果返回false,则结束遍历
- })
- return result
- }
- func (s *SyncDict) Clear() {
- *s = *NewSyncDict()
- }
- func NewSyncDict() *SyncDict {
- return &SyncDict{}
- }
|