欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Golang 求数组和切片中出现次数最多的值和次数

程序员文章站 2022-06-03 08:41:54
...

求数组和切片中出现最多次数的值和次数

最近在学习Golang的过程中发现需要用到这些东西,原本以为Golang有类似PHP中的array_count_values() 函数,可最终我没有找到。经过百度发现有大佬在博客写过这个func,所以我将其copy下来并做了一些小的修改&&加了点注释。在此也感谢那位大佬的func。代码如下:

注意:func中用的是int,如果你们的类型不同导致报错可能需要修改类型

//求数组中出现次数最多的值和次数
func ArrayCountValues(args []int) (Status bool, MaxCount int, MaxValue []int) {
	/*【1】没值直接退出*/
	if len(args) == 0 {
	    return false, 0, nil
	}

	/*【2】求出每个值对应出现的次数,例:[值:次数,值:次数]*/
	newMap := make(map[int]int)
	for _, value := range args {
	    if newMap[value] != 0 {
			newMap[value]++
		} else {
			newMap[value] = 1
		}
	}

	/*【3】求出出现最多的次数*/
	var allCount []int //所有的次数
	var maxCount int   //出现最多的次数
	for _, value := range newMap {
		allCount = append(allCount, value)
	}
	maxCount = allCount[0]
	for i := 0; i < len(allCount); i++ {
		if maxCount < allCount[i] {
			maxCount = allCount[i]
		}
	}

	/*【4】求数组中出现次数最多的值,例:[8,9]这个两个值出现的次数一样多*/
	var maxValue []int
	for key, value := range newMap {
		if value == maxCount {
			maxValue = append(maxValue, key)
		}
	}

	return true, maxCount, maxValue
}

 

转自:https://blog.csdn.net/samete9011/article/details/72834675

:如果你有好的建议或者意见,欢迎交流讨论