这个算法用在按分词在数据库中查询的id集合,最后输出带有权重的id数组。类似的思路是Elasticsearch中的中文检索算法。

算法:

package KitLibimport ("fmt""sort"
)type Recommend struct {//Array []int
}// RecommendArraysInt 分词ID推荐
// 多组int数组
// 重复int组成优先级第一的,不重复int各数组跟在后面
// 调用:rec := KitLib.Recommend{}
//      rec.RecommendArraysId(arrays)
func (kit *Recommend) RecommendArraysInt(arrays map[string][]int) []int {// 合并所有数组为一个数组,只输出valuevar newArray []intfor _, v := range arrays {newArray = append(newArray, v...)}rec := Recommend{}alikeArray := rec.OrderHasArray(newArray) // 按出现次数排序return alikeArray
}// OrderHasArray 按元素出现次数排名数组,出现次数多的排前面
func (kit *Recommend) OrderHasArray(array []int) []int {// 获取最大出现次数max := SameNum(array)// 按出现次数排名数组值recoverArray := arrayalikeArray := arrayfor m:=0; m<max-1; m++ {recoverArray, _ = SameArray(recoverArray)alikeArray = append(alikeArray, recoverArray...)}alikeArray = ReverseArray(alikeArray) // 反转数组alikeArray = RemoveRepeatArray(alikeArray) // 去重return alikeArray
}//======// SameNum 获取数组中重复最多的值的次数
func SameNum(array []int) int {m1 := make(map[int]int)var s2 []intvar max intfor _, v := range array {if m1[v] != 0 {m1[v]++} else {m1[v] = 1}}for _, v := range m1 {s2 = append(s2, v)}if len(s2) > 0 {max = s2[0]for i := 0; i < len(s2); i++ {if max < s2[i] {max = s2[i]}}//fmt.Println(max)return max}else {return len(array)}
}// ReverseArray 数组反转
func ReverseArray(array []int) []int {x := arrayfor i, j := 0, len(x)-1; i < j; i, j = i+1, j-1 {x[i], x[j] = x[j], x[i]}return x
}// RemoveRepeatArray 数组去重
func RemoveRepeatArray(array []int) []int {newArray := make([]int, 0)for _, i := range array {if len(newArray) == 0 {newArray = append(newArray, i)} else {for k, v := range newArray {if i == v {break}if k == len(newArray)-1 {newArray = append(newArray,i)}}}}return newArray
}//SameArray 获取一个数组中相等的键的集合(出现2次)
func SameArray(nums []int) ([]int, []int) {sort.Ints(nums)var i intvar alike []int // 相同值数组var unlike []int // 异同值数组// 出现2次for i = 1; i < len(nums); i++ {if nums[i] == nums[i-1] {alike = append(alike, nums[i])}else {unlike = append(unlike, nums[i])}}return alike, unlike
}

调用示例:

func main()  {var arrays map[string][]intarrays = map[string][]int{"array1": {1,2,3,4,5,11,12,13,14,21,22,23,24,30,31},"array2": {6,7,8,11,12,30,30,33,34,35},"array3": {12,30,33,34,41,42,100,101},"array4": {},}rec := Recommend{}back := rec.RecommendArraysInt(arrays)fmt.Println(back)
}

返回:

[30 12 34 33 11 101 100 42 41 35 31 24 23 22 21 14 13 8 7 6 5 4 3 2 1]

-

Go按多组id数组出现次数,由多到少排序并去重,输出权重id数组相关推荐

  1. C++查询文本中所有单词出现的频率,并且根据出现次数由多到少依次排列。

    C++统计文章中所有单词出现的频率,并且根据出现次数由多到少依次排列. 编译器 本人所用的编译器为:CodeBlocks 程序说明 该程序统计查找文本中所有单词的出现次数,并且根据出现次数由多到少依次 ...

  2. 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。

    问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输入格式 输入的第一行包含一个整数n,表示给定数字的个数. 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所 ...

  3. 数组按照元素个数由多到少排序

    把数组按照元素个数由多到少(默认顺序:小->大)排序. 例如数组:[1,2,5,3,2], 排序后,输出[2,2,1,3,5] #include<stdio.h> int main( ...

  4. python 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出

    [输入形式] 输入的第一行包含一个整数n,表示给定数字的个数. 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数. [输出形式] 输出多行,每行包含两个整数,分别表示一个给定的整数和 ...

  5. 统计字符出现的次数(输出由多到少)

    函数实现: 输入一段文本,统计每个字符出现的次数,按照字符出现次数从多到少,依次输出,格式如下: 字符1-个数 字符2-个数 -- #include<stdio.h> #include&l ...

  6. Java编程笔试时输入问题:如何输入固定长度、不定长度的一维数组?如何输入固定长度、不定长度的二维数组?

    Java编程笔试时输入问题: 如何输入固定长度.不定长度的一维数组? 如何输入固定长度.不定长度的二维数组? 如何将数组中的内容直接输出,不要中括号和逗号? 文章目录 ==Java编程笔试时输入问题= ...

  7. js 去重某个键值 数组对象_JS数组去重常见方法分析

    数组去重是开发中经常会遇到的问题,也是面试时经常会考到的.JS实现数组去重可以有多种方法: 一.简单的去重方法 用一个类比来简单解释一下这种去重方法的思路:A篮子里有若干个不同颜色和大小的球,旁边放一 ...

  8. java数组去重方法是,java数组去重的两种方法

    我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...

  9. Json数组列表中的数据分组排序、组内排序

    文章目录 问题描述 方式一:先全部排序,在分组排序 方式二:使用HashMap取出来分组再组内排序 方式三:使用TreeMap取出来分组再组内排序 测试代码及耗时 问题描述 现在有一个用户信息数组,用 ...

最新文章

  1. linux下php连接mysql数据库_Linux下PHP连接Oracle数据库
  2. 【mybatis】在mybatis分页查询时,主表对关联表 一对多 分页查询怎么实现
  3. CentOS 5.5 挂载windows ntfs 文件系统
  4. Django1.7开发博客
  5. C#几种访问修饰符理解
  6. Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍
  7. 安卓屏幕尺寸相关知识
  8. 简述oracle数据库特殊状态,【OracleDB】 01 概述和基本操作
  9. c++string类寻找子串
  10. cad画圆如何确定圆心_CAD如何利用对象捕捉追踪功能来确定小圆圆心以及矩形的角点位置...
  11. time+dd测试硬盘读写速度
  12. 动手学深度学习 ——概率论基础
  13. MT8377 MT8389 MT6589 MT6577解析
  14. 微信ipad协议简述
  15. linux安装Oracle11g详细教程(redhat6、Centos7)
  16. 解压缩软件RAR Extractor Mac
  17. 如何在android运行lua脚本(最简单的讲解,一看就懂)
  18. A/B-Test简介
  19. 流式布局FlowLayout使用
  20. IE8中parseInt的坑

热门文章

  1. 最热网友收藏:深入理解C语言指针的奥秘((2007年第3周)
  2. 狄拉克函数- dirac 分布
  3. php订阅号网页登录,微信订阅号怎么使用网页授权登录
  4. html怎样添加excel表格,html 使用 excel表格数据类型-如何给html页面添加excel表格
  5. CISSP考点拾遗——SDLC(1)
  6. 新人如何利用今日头条自媒体平台赚钱?月收入轻松过万
  7. 渗透测试八个步骤【渗透测试流程】
  8. C++约瑟夫环改良版
  9. 文献管理与信息分析2023春课程随堂测验答案
  10. 博易终于发布新版本了