• Map根据值的大小排序转成切片slice
  • // 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
    }