|
@@ -0,0 +1,41 @@
|
|
|
+package spiderutil
|
|
|
+
|
|
|
+import "sort"
|
|
|
+
|
|
|
+type StringValSorter struct {
|
|
|
+ Keys []string
|
|
|
+ Vals []string
|
|
|
+}
|
|
|
+
|
|
|
+func MapStringValueSort(m map[string]string) *StringValSorter {
|
|
|
+ vs := NewStringValSorter(m)
|
|
|
+ vs.Sort()
|
|
|
+ return vs
|
|
|
+}
|
|
|
+
|
|
|
+func NewStringValSorter(m map[string]string) *StringValSorter {
|
|
|
+ vs := &StringValSorter{
|
|
|
+ Keys: make([]string, 0, len(m)),
|
|
|
+ Vals: make([]string, 0, len(m)),
|
|
|
+ }
|
|
|
+ for k, v := range m {
|
|
|
+ vs.Keys = append(vs.Keys, k)
|
|
|
+ vs.Vals = append(vs.Vals, v)
|
|
|
+ }
|
|
|
+ return vs
|
|
|
+}
|
|
|
+
|
|
|
+func (vs *StringValSorter) Sort() {
|
|
|
+ sort.Sort(vs)
|
|
|
+}
|
|
|
+
|
|
|
+func (vs *StringValSorter) Len() int {
|
|
|
+ return len(vs.Vals)
|
|
|
+}
|
|
|
+func (vs *StringValSorter) Less(i, j int) bool {
|
|
|
+ return vs.Vals[i] < vs.Vals[j]
|
|
|
+}
|
|
|
+func (vs *StringValSorter) Swap(i, j int) {
|
|
|
+ vs.Vals[i], vs.Vals[j] = vs.Vals[j], vs.Vals[i]
|
|
|
+ vs.Keys[i], vs.Keys[j] = vs.Keys[j], vs.Keys[i]
|
|
|
+}
|