当前位置: 首页 > news >正文

Golang map 常用方法

文章目录

        • 前言
        • 按key排序
        • 按value排序
        • 统计字符串中元素重复出现次数并将结果排序返回

前言

由于map是无序的,所以排序成 slice 返回,且都使用泛,代码只是示例,省略了错误判断

按key排序

package mainimport "fmt"func example[T comparable, S any](source map[T]S, assert func(a, b T) bool) []S {var (i []Tj []S)for k, _ := range source {i = append(i, k)}result := sort(i, assert)for _, k := range result {j = append(j, source[k])}return j
}func sort[T any](source []T, assert func(a, b T) bool) []T {for i := 0; i < len(source); i++ {for j := i + 1; j < len(source); j++ {if assert(source[i], source[j]) {source[j], source[i] = source[i], source[j]}}}return source
}func main() {s := example(map[int]string{2: "b", 1: "a", 3: "c"}, func(a, b int) bool {return a > b})fmt.Println(s) //[c,b,a]
}

按value排序

package mainimport "fmt"func example[T comparable, S any](source map[T]S, assert func(a, b S) bool) []S {var (i []S)for _, v := range source {i = append(i, v)}return sort(i, assert)
}func sort[T any](source []T, assert func(a, b T) bool) []T {for i := 0; i < len(source); i++ {for j := i + 1; j < len(source); j++ {if assert(source[i], source[j]) {source[j], source[i] = source[i], source[j]}}}return source
}func main() {s := example(map[int]int{3: 2, 2: 1, 1: 3}, func(a, b int) bool {return a > b})fmt.Println(s)
}

统计字符串中元素重复出现次数并将结果排序返回

package mainimport "fmt"type count struct {value stringcount int
}func example(s string) []count {var countSlice []countm := make(map[string]int, len(s))for _, char := range s {m[string(char)]++}for k, v := range m {countSlice = append(countSlice, count{count: v, value: k})}return sort(countSlice, func(a, b count) bool {return a.count > b.count})
}func sort[T any](source []T, assert func(a, b T) bool) []T {for i := 0; i < len(source); i++ {for j := i + 1; j < len(source); j++ {if assert(source[i], source[j]) {source[j], source[i] = source[i], source[j]}}}return source
}func main() {s := example("abaabccccc")fmt.Println(s) //[{b 2} {a 3} {c 5}]
}
http://www.lryc.cn/news/114550.html

相关文章:

  • 用于视觉跟踪的在线特征选择研究(Matlab代码实现)
  • Docker基本使用
  • PHP生成随机数
  • MongoDB:Unrecognized option: storage
  • Java基础九 - 异常
  • [国产MCU]-BL602开发实例-UART数据发送与接收
  • mac安装open3d时候出现错误
  • 打造本地户外装备小程序商城教程大揭秘
  • 在外SSH远程连接Ubuntu系统
  • GOTS标准速递---7.0 版将于2024年3月1日起全面生效
  • Ansible的安装和配置
  • 口-肠-脑轴与精神健康的关系
  • Dubbo是干嘛的,Dubbo原理和机制,Dubbo的核心组件
  • 自动zksync刷账户交互(附代码)
  • 荐读 | 《揭秘云计算与大数据》
  • RISC-V基础之内存分布与映射
  • 【Unity3D应用案例系列】Unity3D中实现文字转语音的工具开发
  • STM32入门——定时器
  • 企业工商信息:知识产权出质
  • batch_softmax_loss
  • 刘汉清:从生活到画布,宠物成为灵感源泉
  • 【LeetCode】240.搜索二维矩阵Ⅱ
  • SED正则表达式中[方括号]的特殊处理
  • Android 音频开发
  • Java8新特性,Lambda,Stream流
  • 模型训练之train.py代码解析
  • linux 复习
  • C语言刷题------(2)
  • JVM 之 OopMap 和 RememberedSet
  • Original error: gsmCall method is only available for emulators