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 }