代码拉取完成,页面将自动刷新
package bzgncmap
import (
"errors"
"gitee.com/breezeHub/bzv2/pkg/data/bzmap"
"gitee.com/breezeHub/bzv2/pkg/data/bzstr"
"sync/atomic"
)
// Put 新增
// @param key K 键
// @param val V 值
func (m *Map[K, V]) Put(key K, val V) bool {
allow := true
if m.isUnique {
m.getFunc(func(ms map[K]V) {
for k, v := range ms {
if k != key && v == val {
allow = false
return
}
}
})
}
if !allow {
return false
}
m.putFunc(func(ms map[K]V) {
atomic.AddInt32(&m.count, 1)
m.m[key] = val
})
return true
}
// PutMany 新增多个
func (m *Map[K, V]) PutMany(ms map[K]V) bool {
if len(ms) <= 0 {
return false
}
allow := true
if m.isUnique {
m.getFunc(func(_ map[K]V) {
allow = !bzmap.MatchMapFunc[K, V](m.m, ms, func(key K, value V, targetKey K, targetValue V) bool {
return key != targetKey && value == targetValue
})
})
}
if !allow {
return false
}
m.putFunc(func(_ map[K]V) {
atomic.AddInt32(&m.count, int32(len(ms)))
for key, val := range ms {
m.m[key] = val
}
})
return true
}
// Merge 合并
func (m *Map[K, V]) Merge(newM *Map[K, V]) bool {
if len(newM.m) <= 0 {
return false
}
allow := true
if m.isUnique {
m.getFunc(func(_ map[K]V) {
allow = !bzmap.MatchMapFunc[K, V](m.m, newM.m, func(key K, value V, targetKey K, targetValue V) bool {
return key != targetKey && value == targetValue
})
})
}
if !allow {
return false
}
m.putFunc(func(_ map[K]V) {
atomic.AddInt32(&m.count, int32(len(newM.m)))
for key, val := range newM.m {
m.m[key] = val
}
})
return true
}
// AddJson 合并json
func (m *Map[K, V]) AddJson(jsonString string) error {
if len(jsonString) <= 0 {
return errors.New("json is null")
}
var newM map[K]V
if err := json.Unmarshal(bzstr.ToByte(jsonString), &newM); err != nil {
return err
}
allow := true
if m.isUnique {
m.getFunc(func(_ map[K]V) {
allow = !bzmap.MatchMapFunc[K, V](m.m, newM, func(key K, value V, targetKey K, targetValue V) bool {
return key != targetKey && value == targetValue
})
})
}
if !allow {
return errors.New("has same value")
}
m.putFunc(func(_ map[K]V) {
atomic.AddInt32(&m.count, int32(len(newM)))
for key, val := range newM {
m.m[key] = val
}
})
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。