anyMap

package
v1.64.46 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 6, 2026 License: Apache-2.0 Imports: 5 Imported by: 0

README

AnyMap 使用说明

  1. 初始化

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	m1 := anyMap.New(anyMap.Map(map[string]string{"姓名": "张三", "年龄": "18"}))
    	Println(m1.ToString()) //map[姓名:张三 年龄:18]
    
    	m2 := anyMap.New(anyMap.Cap[string, int](10))
    	m2.SetAttrs(anyMap.Map(map[string]int{"张三": 18, "李四": 19, "王五": 20, "赵六": 21}))
    	Println(m2.ToString()) // map[张三:18 李四:19 王五:20 赵六:21]
    
    	m3 := anyMap.New(anyMap.Cap[string, bool](5))
    	m3.SetValue("张三", true).SetValue("李四", false).SetValue("王五", true).SetValue("赵六", false)
    	Println(m3.ToString()) // map[张三:true 李四:false 王五:true 赵六:false]
    }
    
  2. 查看key是否存在

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	m1 := anyMap.New(anyMap.Map(map[string]any{"张三": 18, "李四": 19, "王五": 20, "赵六": 21}))
    	Printf("张三 exist: %v\n", m1.Has("张三")) // 张三 exist: true
    	Printf("孙七 exist: %v\n", m1.Has("孙七")) // 孙七 exist: false
    }
    
  3. 获取原始数据

    package main
    
     import (
         . "fmt"
    
         "github.com/aid297/aid/dict/anyMap"
     )
    
     func main() {
         m1 := anyMap.New(anyMap.Map(map[string]any{"张三": 18, "李四": 19, "王五": 20, "赵六": 21}))
         Printf("all : %v\n", m1.ToMap()) // all : map[张三:18 李四:19 王五:20 赵六:21]
     }
     // 原始数据的遍历的区别在于遍历时顺序不唯一
    
  4. 判断是否为空anyMapper

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	Println(anyMap.New(anyMap.Map(map[string]any{})).IsEmpty())          // true
    	Println(anyMap.New(anyMap.Map(map[string]any{"a": 1})).IsEmpty())    // false
    	Println(anyMap.New(anyMap.Map(map[string]any{"a": 1})).IsNotEmpty()) // true
    }
    
  5. 通过key获取value

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	m1 := anyMap.New(anyMap.Map(map[string]any{"a": 1, "b": 2, "c": 3}))
    	v, exist := m1.GetValueByKey("b")
    	Printf("b is exist: %v\n", exist) // b is exist: true
    	Printf("b's value is: %v\n", v)   // b's value is: 2
    
    	Printf("get many values by keys: %+v\n", m1.GetValuesByKeys("a", "c")) // get many values by keys: &{data:[1 3] mu:{w:{state:0 sema:0} writerSem:0 readerSem:0 readerCount:{_:{} v:0} readerWait:{_:{} v:0}}}
    
      // GetValuesByKeys方法返回的是一个anySlice.AnySlicer
    }
    
  6. 判断keyvalue是否存在

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	m1 := anyMap.New(anyMap.Map(map[string]any{"a": 1, "b": 2, "c": 3}))
    	Printf("`a` is in keys of m1: %v\n", m1.HasKey("a"))           // `a` is in keys of m1: true
    	Printf("`a` or `d` in keys of m1: %v\n", m1.HasKeys("a", "d")) // `a` or `d` in keys of m1: true
    
    	Printf("`1` is in values of m1: %v\n", m1.HasValue(1))         // `1` is in values of m1: true
    	Printf("`1` or `4` in values of m1: %v\n", m1.HasValues(1, 4)) // `1` or `4` in values of m1: true
    }
    
  7. default处理

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	m1 := anyMap.New(anyMap.Map(map[string]any{"a": 1, "b": 2, "c": 3}))
    	m1.HasKeyDefault(
    		"d",
    		func(v any) any { return v.(int) + 111 }, // 如果存在 d,则回调 d 的值并处理再返回
    		func() any { return 4 },                  // 如果不存在 d,则设置 d 的值为4
    	)
    	Printf("%+v\n", m1.ToString()) // map[a:1 b:2 c:3 d:4]
    }
    
  8. 获取所有keys和所有values

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	m1 := anyMap.New(anyMap.Map(map[string]any{"a": 1, "b": 2, "c": 3}))
    	Printf("keys: %v\n", m1.GetKeys().ToSlice())     // keys: [c a b]
    	Printf("values: %v\n", m1.GetValues().ToSlice()) // values: [3 1 2]
      // 注意:从这个案例中可以看出,anyMap.Map初始化这种方式并不能保证 `Key` 的顺序
    }
    
  9. 判断长度纯长度

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	m1 := anyMap.New(anyMap.Map(map[string]any{"a": 1, "b": 2, "c": 3, "d": 0, "e": nil, "f": nil, "g": struct{}{}}))
    	Printf("length: %d\n", m1.Length())                        // length: 7
    	Printf("length with not empty: %d\n", m1.LengthNotEmpty()) // length with not empty: 3
    }
    
  10. 过滤

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	m1 := anyMap.New(anyMap.Map(map[string]uint8{"张三": 40, "李四": 50, "王五": 60, "赵六": 70}))
    	m1.Filter(func(item uint8) bool { return item >= 60 })
    	Printf("filted map: %+v\n", m1.ToMap()) // filted map: map[王五:60 赵六:70] Filter方法会修改原map
    }
    
  11. 剩余简单方法或与AnySlicer类似方法

    RemoveEmpty() AnyMapper[K, V]
    Join(sep string) string
    JoinNotEmpty(sep string) string
    InKey(keys ...K) bool
    NotInKey(keys ...K) bool
    InValue(values ...V) bool
    NotInValue(values ...V) bool
    AllEmpty() bool
    AnyEmpty() bool
    RemoveByKey(key K) AnyMapper[K, V]
    RemoveByKeys(keys ...K) AnyMapper[K, V]
    RemoveByValue(value V) AnyMapper[K, V]
    RemoveByValues(values ...V) AnyMapper[K, V]
    Every(fn func(key K, value V) V) AnyMapper[K, V]
    Each(fn func(key K, value V)) AnyMapper[K, V]
    Clean() AnyMapper[K, V]
    MarshalJSON() ([]byte, error)
    UnmarshalJSON(data []byte) error
    
  12. 高级方法:转换

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    	"github.com/spf13/cast"
    )
    
    func main() {
    	m2 := anyMap.Cast(
    		anyMap.New(anyMap.Map(map[string]uint8{"张三": 40, "李四": 50, "王五": 60, "赵六": 70})),
    		func(k string, v uint8) string { return cast.ToString(v) },
    	)
    	Printf("m2: %#v\n", m2.ToMap()) // m2: map[string]string{"张三":"40", "李四":"50", "王五":"60", "赵六":"70"}
    }
    
  13. 高级用法:压缩

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    func main() {
    	Println(
    		anyMap.Zip(
    			[]string{"张三", "李四", "王五", "赵六"},
    			[]bool{true, false, true, false},
    		).ToString(),
    	) // map[张三:true 李四:false 王五:true 赵六:false]
    }
    
  14. 高级用法:structmap[string]any

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/dict/anyMap"
    )
    
    type User struct {
    	Name   string `json:"name"`
    	Age    int    `json:"age"`
    	Gender string `json:"gender"`
    }
    
    func main() {
    	u := User{Name: "Alice", Age: 30, Gender: "female"}
    	r, e := anyMap.StructToOther[User, map[string]any](u)
    	if e != nil {
    		panic(e)
    	}
    	Printf("%v\n", r) // map[age:30 gender:female name:Alice]
    }
    

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func StructToOther added in v1.64.23

func StructToOther[K any, V any](src K) (ret V, err error)

StructToOther struct 通过 json 转其他格式

Types

type AnyMap

type AnyMap[K comparable, V any] struct {
	// contains filtered or unexported fields
}

func (*AnyMap[K, V]) AllEmpty

func (my *AnyMap[K, V]) AllEmpty() bool

func (*AnyMap[K, V]) AnyEmpty

func (my *AnyMap[K, V]) AnyEmpty() bool

func (*AnyMap[K, V]) AppendKey

func (my *AnyMap[K, V]) AppendKey(k K) AnyMapper[K, V]

AppendKey 向字典的键列表追加一个键

func (*AnyMap[K, V]) AppendValue

func (my *AnyMap[K, V]) AppendValue(v V) AnyMapper[K, V]

AppendValue 向字典的值列表追加一个值

func (*AnyMap[K, V]) Clean

func (my *AnyMap[K, V]) Clean() AnyMapper[K, V]

func (*AnyMap[K, V]) Copy added in v1.64.42

func (my *AnyMap[K, V]) Copy() AnyMapper[K, V]

func (*AnyMap[K, V]) Each

func (my *AnyMap[K, V]) Each(fn func(key K, value V)) AnyMapper[K, V]

func (*AnyMap[K, V]) Every

func (my *AnyMap[K, V]) Every(fn func(key K, value V) V) AnyMapper[K, V]

func (*AnyMap[K, V]) Filter

func (my *AnyMap[K, V]) Filter(fn func(item V) bool) AnyMapper[K, V]

func (*AnyMap[K, V]) GetKeyByValue

func (my *AnyMap[K, V]) GetKeyByValue(value V) (K, bool)

func (*AnyMap[K, V]) GetKeys

func (my *AnyMap[K, V]) GetKeys() anySlice.AnySlicer[K]

func (*AnyMap[K, V]) GetKeysByValues

func (my *AnyMap[K, V]) GetKeysByValues(values ...V) anySlice.AnySlicer[K]

func (*AnyMap[K, V]) GetValueByKey

func (my *AnyMap[K, V]) GetValueByKey(key K) (V, bool)

func (*AnyMap[K, V]) GetValues

func (my *AnyMap[K, V]) GetValues() anySlice.AnySlicer[V]

func (*AnyMap[K, V]) GetValuesByKeys

func (my *AnyMap[K, V]) GetValuesByKeys(keys ...K) anySlice.AnySlicer[V]

func (*AnyMap[K, V]) Has

func (my *AnyMap[K, V]) Has(key K) bool

func (*AnyMap[K, V]) HasKey

func (my *AnyMap[K, V]) HasKey(key K) bool

func (*AnyMap[K, V]) HasKeyDefault

func (my *AnyMap[K, V]) HasKeyDefault(key K, existFn func(v V) V, notExistFn func() V) AnyMapper[K, V]

func (*AnyMap[K, V]) HasKeys

func (my *AnyMap[K, V]) HasKeys(keys ...K) bool

func (*AnyMap[K, V]) HasValue

func (my *AnyMap[K, V]) HasValue(value V) bool

func (*AnyMap[K, V]) HasValues

func (my *AnyMap[K, V]) HasValues(values ...V) bool

func (*AnyMap[K, V]) InKey

func (my *AnyMap[K, V]) InKey(keys ...K) bool

func (*AnyMap[K, V]) InValue

func (my *AnyMap[K, V]) InValue(values ...V) bool

func (*AnyMap[K, V]) IsEmpty

func (my *AnyMap[K, V]) IsEmpty() bool

func (*AnyMap[K, V]) IsNotEmpty

func (my *AnyMap[K, V]) IsNotEmpty() bool

func (*AnyMap[K, V]) Join

func (my *AnyMap[K, V]) Join(sep string) string

func (*AnyMap[K, V]) JoinNotEmpty

func (my *AnyMap[K, V]) JoinNotEmpty(sep string) string

func (*AnyMap[K, V]) Length

func (my *AnyMap[K, V]) Length() int

func (*AnyMap[K, V]) LengthNotEmpty

func (my *AnyMap[K, V]) LengthNotEmpty() int

func (*AnyMap[K, V]) Lock

func (my *AnyMap[K, V]) Lock() AnyMapper[K, V]

func (*AnyMap[K, V]) MarshalJSON

func (my *AnyMap[K, V]) MarshalJSON() ([]byte, error)

MarshalJSON 实现接口:json序列化

func (*AnyMap[K, V]) NotInKey

func (my *AnyMap[K, V]) NotInKey(keys ...K) bool

func (*AnyMap[K, V]) NotInValue

func (my *AnyMap[K, V]) NotInValue(values ...V) bool

func (*AnyMap[K, V]) RLock

func (my *AnyMap[K, V]) RLock() AnyMapper[K, V]

func (*AnyMap[K, V]) RUnlock

func (my *AnyMap[K, V]) RUnlock() AnyMapper[K, V]

func (*AnyMap[K, V]) RemoveByKey

func (my *AnyMap[K, V]) RemoveByKey(key K) AnyMapper[K, V]

func (*AnyMap[K, V]) RemoveByKeys

func (my *AnyMap[K, V]) RemoveByKeys(keys ...K) AnyMapper[K, V]

func (*AnyMap[K, V]) RemoveByValue

func (my *AnyMap[K, V]) RemoveByValue(value V) AnyMapper[K, V]

func (*AnyMap[K, V]) RemoveByValues

func (my *AnyMap[K, V]) RemoveByValues(values ...V) AnyMapper[K, V]

func (*AnyMap[K, V]) RemoveEmpty

func (my *AnyMap[K, V]) RemoveEmpty() AnyMapper[K, V]

func (*AnyMap[K, V]) SetAttrs

func (my *AnyMap[K, V]) SetAttrs(attrs ...Attributer[K, V]) AnyMapper[K, V]

SetAttrs 设置属性

func (*AnyMap[K, V]) SetData

func (my *AnyMap[K, V]) SetData(data map[K]V) AnyMapper[K, V]

SetData 设置字典键值对

func (*AnyMap[K, V]) SetDataCap

func (my *AnyMap[K, V]) SetDataCap(cap int) AnyMapper[K, V]

SetDataCap 设置字典数据容量

func (*AnyMap[K, V]) SetDatum

func (my *AnyMap[K, V]) SetDatum(k K, v V) AnyMapper[K, V]

SetDatum 设置字典的单个键值对

func (*AnyMap[K, V]) SetKeys

func (my *AnyMap[K, V]) SetKeys(keys anySlice.AnySlicer[K]) AnyMapper[K, V]

SetKeys 设置字典的键列表

func (*AnyMap[K, V]) SetValue

func (my *AnyMap[K, V]) SetValue(k K, v V) AnyMapper[K, V]

func (*AnyMap[K, V]) SetValues

func (my *AnyMap[K, V]) SetValues(values anySlice.AnySlicer[V]) AnyMapper[K, V]

SetValues 设置字典的值列表

func (*AnyMap[K, V]) ToMap

func (my *AnyMap[K, V]) ToMap() map[K]V

func (*AnyMap[K, V]) ToString

func (my *AnyMap[K, V]) ToString() string

func (*AnyMap[K, V]) Unlock

func (my *AnyMap[K, V]) Unlock() AnyMapper[K, V]

func (*AnyMap[K, V]) UnmarshalJSON

func (my *AnyMap[K, V]) UnmarshalJSON(data []byte) error

UnmarshalJSON 实现接口:json反序列化

type AnyMapper

type AnyMapper[K comparable, V any] interface {
	SetAttrs(attrs ...Attributer[K, V]) AnyMapper[K, V]
	SetData(data map[K]V) AnyMapper[K, V]
	SetDatum(k K, v V) AnyMapper[K, V]
	SetDataCap(cap int) AnyMapper[K, V]
	SetKeys(keys anySlice.AnySlicer[K]) AnyMapper[K, V]
	AppendKey(k K) AnyMapper[K, V]
	SetValues(values anySlice.AnySlicer[V]) AnyMapper[K, V]
	AppendValue(v V) AnyMapper[K, V]
	Lock() AnyMapper[K, V]
	Unlock() AnyMapper[K, V]
	RLock() AnyMapper[K, V]
	RUnlock() AnyMapper[K, V]
	Copy() AnyMapper[K, V]
	ToString() string
	ToMap() map[K]V
	IsEmpty() bool
	IsNotEmpty() bool
	Has(key K) bool
	SetValue(k K, v V) AnyMapper[K, V]
	GetValueByKey(key K) (V, bool)
	GetValuesByKeys(keys ...K) anySlice.AnySlicer[V]
	GetKeyByValue(value V) (K, bool)
	GetKeysByValues(values ...V) anySlice.AnySlicer[K]
	HasKey(key K) bool
	HasKeys(keys ...K) bool
	HasValue(value V) bool
	HasValues(values ...V) bool
	HasKeyDefault(key K, existFn func(v V) V, notExistFn func() V) AnyMapper[K, V]
	GetKeys() anySlice.AnySlicer[K]
	GetValues() anySlice.AnySlicer[V]
	Length() int
	LengthNotEmpty() int
	Filter(fn func(item V) bool) AnyMapper[K, V]
	RemoveEmpty() AnyMapper[K, V]
	Join(sep string) string
	JoinNotEmpty(sep string) string
	InKey(keys ...K) bool
	NotInKey(keys ...K) bool
	InValue(values ...V) bool
	NotInValue(values ...V) bool
	AllEmpty() bool
	AnyEmpty() bool
	RemoveByKey(key K) AnyMapper[K, V]
	RemoveByKeys(keys ...K) AnyMapper[K, V]
	RemoveByValue(value V) AnyMapper[K, V]
	RemoveByValues(values ...V) AnyMapper[K, V]
	Every(fn func(key K, value V) V) AnyMapper[K, V]
	Each(fn func(key K, value V)) AnyMapper[K, V]
	Clean() AnyMapper[K, V]
	MarshalJSON() ([]byte, error)
	UnmarshalJSON(data []byte) error
}

func Cast

func Cast[K comparable, SRC, DST any](src AnyMapper[K, SRC], fn func(key K, value SRC) DST) AnyMapper[K, DST]

Cast 转换所有值并创建新 AsnyMapper

func New

func New[K comparable, V any](attrs ...Attributer[K, V]) AnyMapper[K, V]

New 创建一个 AnyMap 实例

func Zip

func Zip[K comparable, V any](keys []K, values []V) AnyMapper[K, V]

Zip 组合键值对为一个新的有序map

type AttrCap

type AttrCap[K comparable, V any] struct {
	// contains filtered or unexported fields
}

func Cap

func Cap[K comparable, V any](cap int) AttrCap[K, V]

func (AttrCap[K, V]) Register

func (my AttrCap[K, V]) Register(anyDict AnyMapper[K, V])

type AttrMap

type AttrMap[K comparable, V any] struct {
	// contains filtered or unexported fields
}

func Map

func Map[K comparable, V any](dict map[K]V) AttrMap[K, V]

func (AttrMap[K, V]) Register

func (my AttrMap[K, V]) Register(anyDict AnyMapper[K, V])

type Attributer

type Attributer[K comparable, V any] interface{ Register(anyDict AnyMapper[K, V]) }

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL