https://github.com/cevaris/ordered_map
Python port of OrderedDict to Go
https://github.com/cevaris/ordered_map
golang ordereddict orderedmap
Last synced: 5 days ago
JSON representation
Python port of OrderedDict to Go
- Host: GitHub
- URL: https://github.com/cevaris/ordered_map
- Owner: cevaris
- License: mit
- Created: 2015-03-01T23:35:51.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2022-10-27T05:12:49.000Z (over 3 years ago)
- Last Synced: 2025-08-13T15:58:15.399Z (6 months ago)
- Topics: golang, ordereddict, orderedmap
- Language: Go
- Homepage:
- Size: 1.34 MB
- Stars: 69
- Watchers: 6
- Forks: 13
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Ordered Map for golang
[](https://travis-ci.org/cevaris/ordered_map)
**OrderedMap** is a Python port of OrderedDict implemented in golang. Golang's builtin `map` purposefully randomizes the iteration of stored key/values. **OrderedMap** struct preserves inserted key/value pairs; such that on iteration, key/value pairs are received in inserted (first in, first out) order.
## Features
- Full support Key/Value for all data types
- Exposes an Iterator that iterates in order of insertion
- Full Get/Set/Delete map interface
- Supports Golang v1.3 through v1.19
## Download and Install
`go get https://github.com/cevaris/ordered_map.git`
## Examples
### Create, Get, Set, Delete
```go
package main
import (
"fmt"
"github.com/cevaris/ordered_map"
)
func main() {
// Init new OrderedMap
om := ordered_map.NewOrderedMap()
// Set key
om.Set("a", 1)
om.Set("b", 2)
om.Set("c", 3)
om.Set("d", 4)
// Same interface as builtin map
if val, ok := om.Get("b"); ok == true {
// Found key "b"
fmt.Println(val)
}
// Delete a key
om.Delete("c")
// Failed Get lookup becase we deleted "c"
if _, ok := om.Get("c"); ok == false {
// Did not find key "c"
fmt.Println("c not found")
}
fmt.Println(om)
}
```
### Iterator
```go
n := 100
om := ordered_map.NewOrderedMap()
for i := 0; i < n; i++ {
// Insert data into OrderedMap
om.Set(i, fmt.Sprintf("%d", i * i))
}
// Iterate though values
// - Values iteration are in insert order
// - Returned in a key/value pair struct
iter := om.IterFunc()
for kv, ok := iter(); ok; kv, ok = iter() {
fmt.Println(kv, kv.Key, kv.Value)
}
```
### Custom Structs
```go
om := ordered_map.NewOrderedMap()
om.Set("one", &MyStruct{1, 1.1})
om.Set("two", &MyStruct{2, 2.2})
om.Set("three", &MyStruct{3, 3.3})
fmt.Println(om)
// Ouput: OrderedMap[one:&{1 1.1}, two:&{2 2.2}, three:&{3 3.3}, ]
```
## For Development
Git clone project
`git clone https://github.com/cevaris/ordered_map.git`
Build and install project
`make`
Run tests
`make test`