教你如何运用golang 实现数组的随机排序
本文主要介绍了golang 数组随机排序的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 |
前言
目前接到一个推荐数据的需求,需要将数据库中获取到的数据进行随机排序后返回给用户。考虑了一下,有两种使用方式,一种是通过数据库 order by rand() ,还有一种就是本文需要使用到的代码处理
具体实现步骤如下
1.引入库
代码如下:
import ("fmt""math/rand""time" )
2.组装数据并排序(方案一)
代码如下:
type CategoryEntity struct {GrouponId int64 //团IDMerchandiseId int64 //商品IDCategoryId int64 //分类IDCategoryTitle string //分类名称 }func main() {data := make([]CategoryEntity, 10)data[0] = CategoryEntity{GrouponId: 0, MerchandiseId: 1117891, CategoryId: 726, CategoryTitle: "蔬菜"}data[1] = CategoryEntity{GrouponId: 1, MerchandiseId: 1110162, CategoryId: 1505, CategoryTitle: "调料调味"}data[2] = CategoryEntity{GrouponId: 2, MerchandiseId: 1117822, CategoryId: 746, CategoryTitle: "水果"}data[3] = CategoryEntity{GrouponId: 3, MerchandiseId: 1115770, CategoryId: 1408, CategoryTitle: "个人护理"}data[4] = CategoryEntity{GrouponId: 4, MerchandiseId: 1116528, CategoryId: 732, CategoryTitle: "肉"}data[5] = CategoryEntity{GrouponId: 5, MerchandiseId: 1116526, CategoryId: 727, CategoryTitle: "休闲食品"}data[6] = CategoryEntity{GrouponId: 6, MerchandiseId: 1117188, CategoryId: 728, CategoryTitle: "粮油调味"}data[7] = CategoryEntity{GrouponId: 7, MerchandiseId: 1117379, CategoryId: 726, CategoryTitle: "蔬菜"}data[8] = CategoryEntity{GrouponId: 8, MerchandiseId: 1118166, CategoryId: 1005, CategoryTitle: "居家百货"}data[9] = CategoryEntity{GrouponId: 9, MerchandiseId: 1117377, CategoryId: 746, CategoryTitle: "水果"}fmt.Println("随机前:", data)//如果不使用rand.Seed(seed int64),每次运行,得到的随机数会一样rand.Seed(time.Now().Unix())//采用rand.Shuffle,将切片随机化处理后返回rand.Shuffle(len(data), func(i, j int) { data[i], data[j] = data[j], data[i] })fmt.Println("随机后:", data) }
3.组装数据并排序(方案二)
代码如下:
type CategoryEntity struct {GrouponId int64 //团IDMerchandiseId int64 //商品IDCategoryId int64 //分类IDCategoryTitle string //分类名称 }func main() {data := make([]CategoryEntity, 10)data[0] = CategoryEntity{GrouponId: 0, MerchandiseId: 1117891, CategoryId: 726, CategoryTitle: "蔬菜"}data[1] = CategoryEntity{GrouponId: 1, MerchandiseId: 1110162, CategoryId: 1505, CategoryTitle: "调料调味"}data[2] = CategoryEntity{GrouponId: 2, MerchandiseId: 1117822, CategoryId: 746, CategoryTitle: "水果"}data[3] = CategoryEntity{GrouponId: 3, MerchandiseId: 1115770, CategoryId: 1408, CategoryTitle: "个人护理"}data[4] = CategoryEntity{GrouponId: 4, MerchandiseId: 1116528, CategoryId: 732, CategoryTitle: "肉"}data[5] = CategoryEntity{GrouponId: 5, MerchandiseId: 1116526, CategoryId: 727, CategoryTitle: "休闲食品"}data[6] = CategoryEntity{GrouponId: 6, MerchandiseId: 1117188, CategoryId: 728, CategoryTitle: "粮油调味"}data[7] = CategoryEntity{GrouponId: 7, MerchandiseId: 1117379, CategoryId: 726, CategoryTitle: "蔬菜"}data[8] = CategoryEntity{GrouponId: 8, MerchandiseId: 1118166, CategoryId: 1005, CategoryTitle: "居家百货"}data[9] = CategoryEntity{GrouponId: 9, MerchandiseId: 1117377, CategoryId: 746, CategoryTitle: "水果"}fmt.Println("随机前:", data)//如果不使用rand.Seed(seed int64),每次运行,得到的随机数会一样rand.Seed(time.Now().Unix())length := len(data)for i := 0; i < length; i++ {exchange(data, rand.Intn(length), i)}fmt.Println("随机后:", data) }// 交换数据 func exchange(data []CategoryEntity, i, j int) {data[i], data[j] = data[j], data[i] }
总结
整体比较简单,但是需要注意的有两点:
1:golang中 rand的使用方式,如果不使用rand.Seed(seed int64),每次运行,得到的随机数会一样
2:方案一种采用rand.Shuffle+匿名函数,将切片随机化处理后返回。
3:方案二使用golang特有的数组交换方式:
func exchange(data []CategoryEntity, i, j int) {data[i], data[j] = data[j], data[i] }
到此这篇关于golang 数组随机排序的实现的文章就介绍到这了。
教你如何运用golang 实现数组的随机排序相关推荐
- php 数组随机排序_php 数组元素随机排序代码
php教程 数组元素随机排序代码 因为工作需要我要对我定义好的数组进行随机排序,每一次循环都要是不同的,下面我们利用了php shuffle函数随机对数组元素进行排序.方法非常简单. shuffle( ...
- matlab某数组中产生不重复随机数,数组的随机排序,randperm函数numel,X=X(A)函数
例如:A=[1,4,5,8,14,15],从数组A中产生3个不重复的随机数.(当然也可以从A=1:n个数中产生几个不重复随机数)或者(将数组随机排序).此过程需要利用randperm函数. 1.ran ...
- 如何实现数组的随机排序
1.使用sort对数组进行排序,使用Math.random()来生成一个随机数,来和0.5进行比较. 代码如下所示: function sortRandom(array) {return array. ...
- js将数组元素随机排序的方法
在群里看见的一个面试题,试了一下,还是可以做出来的,但是需要查资料,主要是岁一些方法了解的不清楚,可能这个跟我平时不太注重基础理论有关系,像什么构造函数啊,我根本就不关心什么叫构造函数,我一直都以为我 ...
- php 数组随机排序_php怎么实现数组随机排序
php数组随机排序,我们可以使用PHP shuffle()函数来实现. PHP shuffle()函数表示随机调整数组中元素或值的顺序.该shuffle()函数FALSE失败时返回. 下面我们就结合具 ...
- golang用数组作为函数参数
在 golang,数组是值.作为参数传进函数时,传递的是数组的原始值拷贝,此时在函数内部是无法更新该数组的 package mainimport "fmt"func main() ...
- Golang 入门 : 数组
数组是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int.string 等,也可以是用户自定义的类型.一个数组包含的元素个数被 ...
- golang json数组拼接
2016年06月16日 15:38:25 阅读数:2575 标签: golang json 数组 更多 个人分类: golang func main() {a := []byte(`{"P ...
- golang 包含 数组_在 Golang 中如何快速判断字符串是否在一个数组中
在使用 Python 的时候,如果要判断一个字符串是否在另一个包含字符串的列表中,可以使用in 关键词,例如: name_list= ['pm', 'kingname', '青南'] if 'king ...
最新文章
- CuteEditor Html中显示Word格式粘贴的文章[CuteEditor WordToHtml]
- 字母s开头的c语言的工具,C语言库函数(S类字母) - 3
- 云服务器搭建代挂,服务器上搭建个人博客
- java enum in class_Java 8需要一个转换,而Java 7没有 – enum.getClass/getDeclaringClass
- Oracle/mysql联合查询union、union all
- 缺陷定位 | 分析推理定位BUG案例(三)
- MyBatis复习(三):MyBatis核心对象SqlSessionFactory和SqlSession
- ORACLE删除表分区和数据
- win7计算机ping不通,win7系统局域网中ping不通本机的解决方法
- 最近和一个35岁的朋友聊天,他最近在找工作
- InfoPath 发布表单到SharePoint库报错
- OpenGL超级宝典 绘制第一个三角形
- html+css+js实现简易计算器
- python安装pyaudio_关于python:PyAudio不会安装
- c语言万年历查询程序代码,C语言实现万年历程序
- ISP(六) 空间域图像变换(图像反转、对数变换、幂次变换、分段线性变换、直方图均衡与匹配)
- 解决word各级标题序号后面有长空格
- opencv 图片边缘渐变_opencv滤镜-PS羽化特效
- 区块链 技术 基本概念
- 怎么发现不了同一网络的其他计算机,局域网中看不到其他计算机怎么办
热门文章
- 干货 | 深度学习检测小目标常用方法
- 美多商城之购物车(购物车管理1)
- UnicodeEncodeError\: gbk codec cant encode character \\xa1 in position 9699的解决办法
- 2021世界上“最猎奇”“最难的”六大编程语言
- FaceShifter:一秒换脸的人脸交换模型
- IEEE signal processing letters 投稿经验
- 【直播回顾】蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程
- 从 webpack 到全面拥抱 Parcel #1 探索 Parcel
- 修改tomcat6.0.25日志默认路径
- sqlmap 常用操作