文档手册

Map根据值的大小排序转成切片slice

2024-06-16 11:43:37
// Map根据值的大小排序转成切片slice
type kv struct { // 定义一个结构体用于存储键值对
   Key   string
   Value int
}

//  函数对 map 进行排序并返回前 maxItems 个键或键值对 (maxItems=0返回所有,separator="" 只返回键)
func topKeysByValue(ci map[string]int, maxItems int, separator string) []string {
   // 创建一个切片用于存储 map 的键值对
   var kvSlice []kv
   for k, v := range ci {
      kvSlice = append(kvSlice, kv{k, v})
   }

   // 对切片进行排序,按值从大到小排序
   sort.Slice(kvSlice, func(i, j int) bool {
      return kvSlice[i].Value > kvSlice[j].Value
   })

   // 确定返回的项目数量,如果 maxItems 为 0,则返回全部项目
   if maxItems == 0 || maxItems > len(kvSlice) {
      maxItems = len(kvSlice)
   }

   // 提取排序后的前 maxItems 个键或键值对
   var result []string
   for i := 0; i < maxItems; i++ {
      if separator != "" {
         result = append(result, fmt.Sprintf("%s%s%d", kvSlice[i].Key, separator, kvSlice[i].Value))
      } else {
         result = append(result, kvSlice[i].Key)
      }
   }

   return result
}