Skip to content

Repository files navigation

Ordered Map for golang

Build Status

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.10
  • Supports JSON Marshal/Unmarshal
  • Supports YAML Marshal/Unmarshal

Download and Install

go get github.com/fredwangwang/orderedmap

Examples

Create, Get, Set, Delete

package main
import (
"fmt""github.com/fredwangwang/orderedmap"
)
funcmain() {
// Init new OrderedMapom:=orderedmap.New()
om.Set("a", 1)
om.Set("b", 2)
ifval, 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)
}

Iterator

n:=100om:=orderedmap.New()
fori:=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 structiter:=om.IterFunc()
forkv, ok:=iter(); ok; kv, ok=iter() {
fmt.Println(kv, kv.Key, kv.Value)
}

Custom Structs

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}, ]

JSON marshal & unmarshal

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

YAML marshal & unmarshal

rawPayload:=`number: 4string: xz: 1a: 2b: 3slice:- '1'- 1orderedmap: e: 1 a: 2testing: 9`om:=orderedmap.New()
yaml.Unmarshal([]byte(rawPayload), om)
constructedPayload, _:=yaml.Marshal(om)
println(string(constructedPayload)) // will get you the same thing as rawPayload

For Development

Git clone project

git clone https://github.com/fredwangwang/orderedmap.git

Build and install project

make

Run tests

make test

About

Python port of OrderedDict to Go

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages