本文主要介绍了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 实现数组的随机排序相关推荐

  1. php 数组随机排序_php 数组元素随机排序代码

    php教程 数组元素随机排序代码 因为工作需要我要对我定义好的数组进行随机排序,每一次循环都要是不同的,下面我们利用了php shuffle函数随机对数组元素进行排序.方法非常简单. shuffle( ...

  2. matlab某数组中产生不重复随机数,数组的随机排序,randperm函数numel,X=X(A)函数

    例如:A=[1,4,5,8,14,15],从数组A中产生3个不重复的随机数.(当然也可以从A=1:n个数中产生几个不重复随机数)或者(将数组随机排序).此过程需要利用randperm函数. 1.ran ...

  3. 如何实现数组的随机排序

    1.使用sort对数组进行排序,使用Math.random()来生成一个随机数,来和0.5进行比较. 代码如下所示: function sortRandom(array) {return array. ...

  4. js将数组元素随机排序的方法

    在群里看见的一个面试题,试了一下,还是可以做出来的,但是需要查资料,主要是岁一些方法了解的不清楚,可能这个跟我平时不太注重基础理论有关系,像什么构造函数啊,我根本就不关心什么叫构造函数,我一直都以为我 ...

  5. php 数组随机排序_php怎么实现数组随机排序

    php数组随机排序,我们可以使用PHP shuffle()函数来实现. PHP shuffle()函数表示随机调整数组中元素或值的顺序.该shuffle()函数FALSE失败时返回. 下面我们就结合具 ...

  6. golang用数组作为函数参数

    在 golang,数组是值.作为参数传进函数时,传递的是数组的原始值拷贝,此时在函数内部是无法更新该数组的 package mainimport "fmt"func main() ...

  7. Golang 入门 : 数组

    数组是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int.string 等,也可以是用户自定义的类型.一个数组包含的元素个数被 ...

  8. golang json数组拼接

    2016年06月16日 15:38:25 阅读数:2575 标签: golang json 数组  更多 个人分类: golang func main() {a := []byte(`{"P ...

  9. golang 包含 数组_在 Golang 中如何快速判断字符串是否在一个数组中

    在使用 Python 的时候,如果要判断一个字符串是否在另一个包含字符串的列表中,可以使用in 关键词,例如: name_list= ['pm', 'kingname', '青南'] if 'king ...

最新文章

  1. CuteEditor Html中显示Word格式粘贴的文章[CuteEditor WordToHtml]
  2. 字母s开头的c语言的工具,C语言库函数(S类字母) - 3
  3. 云服务器搭建代挂,服务器上搭建个人博客
  4. java enum in class_Java 8需要一个转换,而Java 7没有 – enum.getClass/getDeclaringClass
  5. Oracle/mysql联合查询union、union all
  6. 缺陷定位 | 分析推理定位BUG案例(三)
  7. MyBatis复习(三):MyBatis核心对象SqlSessionFactory和SqlSession
  8. ORACLE删除表分区和数据
  9. win7计算机ping不通,win7系统局域网中ping不通本机的解决方法
  10. 最近和一个35岁的朋友聊天,他最近在找工作
  11. InfoPath 发布表单到SharePoint库报错
  12. OpenGL超级宝典 绘制第一个三角形
  13. html+css+js实现简易计算器
  14. python安装pyaudio_关于python:PyAudio不会安装
  15. c语言万年历查询程序代码,C语言实现万年历程序
  16. ISP(六) 空间域图像变换(图像反转、对数变换、幂次变换、分段线性变换、直方图均衡与匹配)
  17. 解决word各级标题序号后面有长空格
  18. opencv 图片边缘渐变_opencv滤镜-PS羽化特效
  19. 区块链 技术 基本概念
  20. 怎么发现不了同一网络的其他计算机,局域网中看不到其他计算机怎么办

热门文章

  1. 干货 | 深度学习检测小目标常用方法
  2. 美多商城之购物车(购物车管理1)
  3. UnicodeEncodeError\: gbk codec cant encode character \\xa1 in position 9699的解决办法
  4. 2021世界上“最猎奇”“最难的”六大编程语言
  5. FaceShifter:一秒换脸的人脸交换模型
  6. IEEE signal processing letters 投稿经验
  7. 【直播回顾】蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程
  8. 从 webpack 到全面拥抱 Parcel #1 探索 Parcel
  9. 修改tomcat6.0.25日志默认路径
  10. sqlmap 常用操作