实现了一个由两棵红黑树支持的双向映射。

这个结构保证了映射的键和值顺序都是升序的。 除了键和值的排序,这种结构的目标是避免元素的重复,如果所包含的元素很大,重复是很重要的。

type Iterator

  1. func (iterator *Iterator) Begin() // 将迭代器重置为初始状态,然后调用Next获取第一个元素
  2. func (iterator *Iterator) End() // 将迭代器移过最后一个元素,然后调用Prev获取最后一个元素
  3. // 将迭代器移动到第一个元素,如果容器中有第一个元素则返回true。
  4. // 如果First()返回true,则可以通过index()和value()检索第一个元素的索引和值。修改迭代器的状态
  5. func (iterator *Iterator) First() bool
  6. // 将迭代器移动到最后元素,如果容器中有第一个元素则返回true。
  7. // 如果Last()返回true,则可以通过index()和value()检索第一个元素的索引和值。修改迭代器的状态
  8. func (iterator *Iterator) Last() bool
  9. func (iterator *Iterator) Next() bool
  10. func (iterator *Iterator) Prev() bool
  11. func (iterator *Iterator) Index() int
  12. func (iterator *Iterator) Value() interface{}

type Map

  1. func NewWith(keyComparator utils.Comparator, valueComparator utils.Comparator) *Map
  2. // 实例化一个双向映射,使用IntComparator的键和值,即键和值的类型是int。
  3. func NewWithIntComparators() *Map
  4. // 实例化一个双向映射,使用StringComparator的键和值,即键和值的类型是string
  5. func NewWithStringComparators() *Map
  6. // 将集合中的每个元素传递给给定的函数,如果函数对所有元素都返回true,则返回true
  7. func (m *Map) All(f func(key interface{}, value interface{}) bool) bool
  8. // 将集合中的每个元素传递给给定的函数,如果函数对任何元素返回true,则返回true
  9. func (m *Map) Any(f func(key interface{}, value interface{}) bool) bool
  10. func (m *Map) Clear()
  11. func (m *Map) Each(f func(key interface{}, value interface{}))
  12. func (m *Map) Empty() bool
  13. // 将容器中的每个元素传递给给定的函数,并返回函数为true或-1的第一个元素(索引,值)
  14. // 如果没有元素符合条件,则返回nil
  15. func (m *Map) Find(f func(key interface{}, value interface{}) bool) (interface{}, interface{})
  16. func (m *Map) FromJSON(data []byte) error
  17. func (m *Map) Get(key interface{}) (value interface{}, found bool)
  18. func (m *Map) GetKey(value interface{}) (key interface{}, found bool)
  19. func (m *Map) Iterator() Iterator
  20. func (m *Map) Keys() []interface{}
  21. // 为每个元素调用给定函数一次,并返回一个包含给定函数返回值的容器
  22. func (m *Map) Map(f func(key1 interface{}, value1 interface{}) (interface{}, interface{})) *Map
  23. func (m *Map) Put(key interface{}, value interface{})
  24. func (m *Map) Remove(key interface{})
  25. // 返回一个新容器,其中包含给定函数返回真值的所有元素
  26. func (m *Map) Select(f func(key interface{}, value interface{}) bool) *Map
  27. func (m *Map) Size() int
  28. func (m *Map) String() string
  29. func (m *Map) ToJSON() ([]byte, error)
  30. func (m *Map) Values() []interface{}

例子

  1. package main
  2. import (
  3. "github.com/emirpasic/gods/maps/treebidimap"
  4. "github.com/emirpasic/gods/utils"
  5. )
  6. // TreeBidiMapExample to demonstrate basic usage of TreeBidiMap
  7. func main() {
  8. m := treebidimap.NewWith(utils.IntComparator, utils.StringComparator)
  9. m.Put(1, "x") // 1->x
  10. m.Put(3, "b") // 1->x, 3->b (ordered)
  11. m.Put(1, "a") // 1->a, 3->b (ordered)
  12. m.Put(2, "b") // 1->a, 2->b (ordered)
  13. _, _ = m.GetKey("a") // 1, true
  14. _, _ = m.Get(2) // b, true
  15. _, _ = m.Get(3) // nil, false
  16. _ = m.Values() // []interface {}{"a", "b"} (ordered)
  17. _ = m.Keys() // []interface {}{1, 2} (ordered)
  18. m.Remove(1) // 2->b
  19. m.Clear() // empty
  20. m.Empty() // true
  21. m.Size() // 0
  22. }