Package: wnpp
Severity: wishlist
Owner: Christoph Martin <[email protected]>

* Package name    : golang-github-elliotchance-orderedmap
  Version         : 1.8.0-1
  Upstream Author : Elliot Chance
* URL             : https://github.com/elliotchance/orderedmap
* License         : Expat
  Programming Lang: Go
Description : An ordered map in Go with amortized O(1) for Set, Get, Delete and Len.

 Basic Usage
 .
 An *OrderedMap is a high performance ordered map that maintains
 amortized O(1) for Set, Get, Delete and Len:
 .
   import "github.com/elliotchance/orderedmap/v3"
 .
   func main() {
        m := orderedmap.NewOrderedMap[string, any]()
 .
        m.Set("foo", "bar")
        m.Set("qux", 1.23)
        m.Set("123", true)
 .
        m.Delete("qux")
   }
 .
  | [!NOTE]
  |
  |  * *v3 requires Go v1.23* - If you need to support Go 1.18-1.22, you
 can
  |  use v2.
  |  * *v2 requires Go v1.18 for generics* - If you need to support Go 1.
 17
  |  or below, you can use v1.
 .
 Internally an *OrderedMap uses the composite type map
 (https://go.dev/blog/maps) combined with a trimmed down linked list to
 maintain the order.
 .
 Iterating
 .
 The following methods all return iterators
 (https://go.dev/doc/go1.23#iterators) that can be used to loop over
 elements in an ordered map:
 .
  * AllFromFront()
  * AllFromBack()
  * Keys()
  * Values()
 .
   // Iterate through all elements from oldest to newest:
   for key, value := range m.AllFromFront() {
        fmt.Println(key, value)
   }
 .
 Iterators are safe to use bidirectionally, and will return nil once it
 goes beyond the first or last item. If the map is changing while the
 iteration is in-flight it may produce unexpected behavior.
 .
 If you want to get a slice of the map keys or values, you can use the
 standard slices.Collect method with the iterator returned from Keys() or
 Values():
 .
   fmt.Println(slices.Collect(m.Keys())
   // [A B C]
 .
 Likewise, calling maps.Collect on the iterator returned from
 AllFromFront() will create a regular unordered map from the ordered one:
 .
   fmt.Println(maps.Collect(m.AllFromFront())
   // [A:1 B:2 C:3]
 .
 If you don't want to use iterators, you can also manually loop over the
 elements using Front() or Back() with Next():
 .
   // Iterate through all elements from oldest to newest:
   for el := m.Front(); el != nil; el = el.Next() {
       fmt.Println(el.Key, el.Value)
   }
 .
   // You can also use Back and Prev to iterate in reverse:
   for el := m.Back(); el != nil; el = el.Prev() {
       fmt.Println(el.Key, el.Value)
   }

Reply via email to