mirror of
https://github.com/HDT3213/godis.git
synced 2025-10-06 01:07:06 +08:00
refactor project structure
This commit is contained in:
108
datastruct/dict/simple.go
Normal file
108
datastruct/dict/simple.go
Normal file
@@ -0,0 +1,108 @@
|
||||
package dict
|
||||
|
||||
type SimpleDict struct {
|
||||
m map[string]interface{}
|
||||
}
|
||||
|
||||
func MakeSimple() *SimpleDict {
|
||||
return &SimpleDict{
|
||||
m: make(map[string]interface{}),
|
||||
}
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) Get(key string) (val interface{}, exists bool) {
|
||||
val, ok := dict.m[key]
|
||||
return val, ok
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) Len() int {
|
||||
if dict.m == nil {
|
||||
panic("m is nil")
|
||||
}
|
||||
return len(dict.m)
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) Put(key string, val interface{}) (result int) {
|
||||
_, existed := dict.m[key]
|
||||
dict.m[key] = val
|
||||
if existed {
|
||||
return 0
|
||||
} else {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) PutIfAbsent(key string, val interface{}) (result int) {
|
||||
_, existed := dict.m[key]
|
||||
if existed {
|
||||
return 0
|
||||
} else {
|
||||
dict.m[key] = val
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) PutIfExists(key string, val interface{}) (result int) {
|
||||
_, existed := dict.m[key]
|
||||
if existed {
|
||||
dict.m[key] = val
|
||||
return 1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) Remove(key string) (result int) {
|
||||
_, existed := dict.m[key]
|
||||
delete(dict.m, key)
|
||||
if existed {
|
||||
return 1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) Keys() []string {
|
||||
result := make([]string, len(dict.m))
|
||||
i := 0
|
||||
for k := range dict.m {
|
||||
result[i] = k
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) ForEach(consumer Consumer) {
|
||||
for k, v := range dict.m {
|
||||
if !consumer(k, v) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) RandomKeys(limit int) []string {
|
||||
result := make([]string, limit)
|
||||
for i := 0; i < limit; i++ {
|
||||
for k := range dict.m {
|
||||
result[i] = k
|
||||
break
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (dict *SimpleDict) RandomDistinctKeys(limit int) []string {
|
||||
size := limit
|
||||
if size > len(dict.m) {
|
||||
size = len(dict.m)
|
||||
}
|
||||
result := make([]string, size)
|
||||
i := 0
|
||||
for k := range dict.m {
|
||||
if i == limit {
|
||||
break
|
||||
}
|
||||
result[i] = k
|
||||
i++
|
||||
}
|
||||
return result
|
||||
}
|
Reference in New Issue
Block a user