|
@@ -101,3 +101,48 @@ func GetValueByKey[K comparable, V any](m map[K]any, key K) (V, bool) {
|
|
|
|
|
|
|
|
return v, true
|
|
return v, true
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+// SortMap 可以排序的map
|
|
|
|
|
+// 模板参数:
|
|
|
|
|
+// K是map的key的类型,V是map值的类型
|
|
|
|
|
+type SortMap[K comparable, V any] struct {
|
|
|
|
|
+ sortedKeys []K
|
|
|
|
|
+ m map[K]V
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Range 遍历排序后的map
|
|
|
|
|
+// 模板参数:
|
|
|
|
|
+// K是map的key的类型,V是map值的类型
|
|
|
|
|
+// 参数:
|
|
|
|
|
+// callback: 遍历回调
|
|
|
|
|
+func (sortMap *SortMap[K, V]) Range(callback func(index int, key K, value V)) {
|
|
|
|
|
+ if callback != nil {
|
|
|
|
|
+ for i, key := range sortMap.sortedKeys {
|
|
|
|
|
+ callback(i, key, sortMap.m[key])
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Sort 排序map
|
|
|
|
|
+// 模板参数:
|
|
|
|
|
+// K是map的key的类型,V是map值的类型
|
|
|
|
|
+// 参数:
|
|
|
|
|
+// m: 需要排序的map
|
|
|
|
|
+// sortKeysFunc: 对key进行排序的回调函数
|
|
|
|
|
+// 返回值:
|
|
|
|
|
+// SortMap指针,之后可以调用Range遍历排序后的map
|
|
|
|
|
+func Sort[K comparable, V any](m map[K]V, sortKeysFunc func(keys []K)) *SortMap[K, V] {
|
|
|
|
|
+ keys := make([]K, 0)
|
|
|
|
|
+ for key := range m {
|
|
|
|
|
+ keys = append(keys, key)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if sortKeysFunc != nil {
|
|
|
|
|
+ sortKeysFunc(keys)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return &SortMap[K, V]{
|
|
|
|
|
+ sortedKeys: keys,
|
|
|
|
|
+ m: m,
|
|
|
|
|
+ }
|
|
|
|
|
+}
|