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.
- 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.10
- Supports JSON Marshal/Unmarshal
- Supports YAML Marshal/Unmarshal
go get github.com/fredwangwang/orderedmap
package main
import (
"fmt"
"github.com/fredwangwang/orderedmap"
)
func main() {
// Init new OrderedMap
om := orderedmap.New()
om.Set("a", 1)
om.Set("b", 2)
if val, ok := om.Get("b"); ok == true {
fmt.Println(val)
}
om.Delete("a")
if _, ok := om.Get("a"); ok == false {
fmt.Println("c not found")
}
fmt.Println(om)
}
n := 100
om := orderedmap.New()
for i := 0; i < n; i++ {
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)
}
om := orderedmap.New()
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}, ]
rawPayload := `{
"number": 4,
"string": "x",
"z": 1,
"a": 2,
"b": 3,
"slice": [
"1",
1
],
"orderedmap": {
"e": 1,
"a": 2
},
"test\"ing": 9
}`
om := orderedmap.New()
json.Unmarshal([]byte(rawPayload), om)
constructedPayload, _ := json.MarshalIndent(om, "", " ")
println(string(constructedPayload)) // will get you the same thing as rawPayload
rawPayload := `number: 4
string: x
z: 1
a: 2
b: 3
slice:
- '1'
- 1
orderedmap:
e: 1
a: 2
testing: 9`
om := orderedmap.New()
yaml.Unmarshal([]byte(rawPayload), om)
constructedPayload, _ := yaml.Marshal(om)
println(string(constructedPayload)) // will get you the same thing as rawPayload
Git clone project
git clone https://github.com/fredwangwang/orderedmap.git
Build and install project
make
Run tests
make test