golang 数组随机排序
文章目录
- 前言
- 具体实现步骤如下
- 1.引入库
- 2.组装数据并排序(方案一)
- 3.组装数据并排序(方案二)
- 总结
前言
目前接到一个推荐数据的需求,需要将数据库中获取到的数据进行随机排序后返回给用户。考虑了一下,有两种使用方式,一种是通过数据库 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 数组随机排序相关推荐
- 关于JavaScript的数组随机排序
昨天了解了一下Fisher–Yates shuffle费雪耶兹随机置乱算法,现在再来看看下面这个曾经网上常见的一个写法: function shuffle(arr) { arr.sort(functi ...
- php 数组随机排序_php怎么实现数组随机排序
php数组随机排序,我们可以使用PHP shuffle()函数来实现. PHP shuffle()函数表示随机调整数组中元素或值的顺序.该shuffle()函数FALSE失败时返回. 下面我们就结合具 ...
- php 数组随机排序_php 数组元素随机排序代码
php教程 数组元素随机排序代码 因为工作需要我要对我定义好的数组进行随机排序,每一次循环都要是不同的,下面我们利用了php shuffle函数随机对数组元素进行排序.方法非常简单. shuffle( ...
- php 二维数组 随机排序_php二维数组排序—默认自然排序
什么是二维数组?二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩阵称变方阵.对称矩阵a ...
- java数组随机排序_JAVA 生成随机数数组,并排序输出
package com.koal.test; import java.util.Arrays; /** * * @author hp * 排序 */ public class Sort { //要生成 ...
- JavaScript数组随机排序
//不断从原数组中随机取一个元素放进新数组,同时删除原数组中该值,递归重复至全部取出.function randomSort(arr, newArr) {var newArr = newArr || ...
- php 二维数组 随机排序_php二维数组排序方法(array_multisort usort)
例如像下面的数组: $users = array( array('name' => 'tom', 'age' => 20), array('name' => 'anny', 'age ...
- 【JS】数组随机排序
第一种方法:利用冒泡排序的原理,使两两元素比较的结果可正可负,它们的位置可换可不换,从而达到随机的目的. var arr = ["鹿晗", "王俊凯", &qu ...
- 数组随机排序(随手记)
注1:集合是无序的且不保证随机的 注2:arc4random_uniform(x),可以用来产生0-(x-1)范围内的随机数,不需要再进行取模运算 方法一: - (NSMutableArray *)r ...
- sort排序,数组随机排序,随即洗牌
jsFun() {console.log(1);//在使用需要某种程度的随机化的算法时.下面的片段以O(n log n)的复杂度对一个数组进行就地洗牌.// 测试const arr = [1, 2, ...
最新文章
- sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...
- 统计每天某一时间段的SQL语句
- 在Bash脚本中,如果发生某种情况,如何退出整个脚本?
- idea spring boot中热部署 自动更新不用重启服务
- php 命名空间 create_function,PHP create_function()注入命令执行漏洞
- 《Adobe SiteCatalyst网站分析权威手册》一1.3 SiteCatalyst是怎么工作的
- kvm虚拟机端口映射(端口转发)到宿主机
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1105:数组逆序重存放
- 【线上圆桌整理 - 腾讯会议】进化中的视频会议
- 感知算法论文(三):Feature Selective Anchor-Free Module for Single-Shot Object Detection
- vim下php文件中自动缩排html代码
- nginx(五)rewrite
- 信息学奥赛一本通 1911:【00NOIP普及组】税收与补贴问题 | 洛谷 P1023 [NOIP2000 普及组] 税收与补贴问题
- git(7)---Git cherry-pick
- 博客转移到cnblogs
- [Centos 7]MYSQL 安装及登录问题
- mapper.xml中注释问题
- kali攻击wifi、破解wifi密码详细教程(一)
- 【第008问 Unity中什么是UV?】
- linux命令man ls,linux 命令ls man手册的详解
热门文章
- Mirth Connect 第二章 什么是通道?
- 2022年全国各省四级行政区划Shp矢量数据
- PHP目录函数 opendir (打开目录句柄)
- Java取交集方法retainAll()
- jdk、jre、jvm区别
- 零基础可入门的Python,为什么有些人自学几天就放弃了?
- 小米开发版安装magisk_小米6x-从零开始安装magisk
- 手机怎么用外嵌字幕_影视剪辑10大添加字幕软件,一键“复制粘贴”,网友:太简单了...
- 步进电机驱动器的作用以及其调速方法
- 了解NLP(自然语言处理)技术