文章目录

  • 前言
  • 具体实现步骤如下
    • 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 数组随机排序相关推荐

  1. 关于JavaScript的数组随机排序

    昨天了解了一下Fisher–Yates shuffle费雪耶兹随机置乱算法,现在再来看看下面这个曾经网上常见的一个写法: function shuffle(arr) { arr.sort(functi ...

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

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

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

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

  4. php 二维数组 随机排序_php二维数组排序—默认自然排序

    什么是二维数组?二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩阵称变方阵.对称矩阵a ...

  5. java数组随机排序_JAVA 生成随机数数组,并排序输出

    package com.koal.test; import java.util.Arrays; /** * * @author hp * 排序 */ public class Sort { //要生成 ...

  6. JavaScript数组随机排序

    //不断从原数组中随机取一个元素放进新数组,同时删除原数组中该值,递归重复至全部取出.function randomSort(arr, newArr) {var newArr = newArr || ...

  7. php 二维数组 随机排序_php二维数组排序方法(array_multisort usort)

    例如像下面的数组: $users = array( array('name' => 'tom', 'age' => 20), array('name' => 'anny', 'age ...

  8. 【JS】数组随机排序

    第一种方法:利用冒泡排序的原理,使两两元素比较的结果可正可负,它们的位置可换可不换,从而达到随机的目的. var arr = ["鹿晗", "王俊凯", &qu ...

  9. 数组随机排序(随手记)

    注1:集合是无序的且不保证随机的 注2:arc4random_uniform(x),可以用来产生0-(x-1)范围内的随机数,不需要再进行取模运算 方法一: - (NSMutableArray *)r ...

  10. sort排序,数组随机排序,随即洗牌

    jsFun() {console.log(1);//在使用需要某种程度的随机化的算法时.下面的片段以O(n log n)的复杂度对一个数组进行就地洗牌.// 测试const arr = [1, 2, ...

最新文章

  1. sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...
  2. 统计每天某一时间段的SQL语句
  3. 在Bash脚本中,如果发生某种情况,如何退出整个脚本?
  4. idea spring boot中热部署 自动更新不用重启服务
  5. php 命名空间 create_function,PHP create_function()注入命令执行漏洞
  6. 《Adobe SiteCatalyst网站分析权威手册》一1.3 SiteCatalyst是怎么工作的
  7. kvm虚拟机端口映射(端口转发)到宿主机
  8. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1105:数组逆序重存放
  9. 【线上圆桌整理 - 腾讯会议】进化中的视频会议
  10. 感知算法论文(三):Feature Selective Anchor-Free Module for Single-Shot Object Detection
  11. vim下php文件中自动缩排html代码
  12. nginx(五)rewrite
  13. 信息学奥赛一本通 1911:【00NOIP普及组】税收与补贴问题 | 洛谷 P1023 [NOIP2000 普及组] 税收与补贴问题
  14. git(7)---Git cherry-pick
  15. 博客转移到cnblogs
  16. [Centos 7]MYSQL 安装及登录问题
  17. mapper.xml中注释问题
  18. kali攻击wifi、破解wifi密码详细教程(一)
  19. 【第008问 Unity中什么是UV?】
  20. linux命令man ls,linux 命令ls man手册的详解

热门文章

  1. Mirth Connect 第二章 什么是通道?
  2. 2022年全国各省四级行政区划Shp矢量数据
  3. PHP目录函数 opendir (打开目录句柄)
  4. Java取交集方法retainAll()
  5. jdk、jre、jvm区别
  6. 零基础可入门的Python,为什么有些人自学几天就放弃了?
  7. 小米开发版安装magisk_小米6x-从零开始安装magisk
  8. 手机怎么用外嵌字幕_影视剪辑10大添加字幕软件,一键“复制粘贴”,网友:太简单了...
  9. 步进电机驱动器的作用以及其调速方法
  10. 了解NLP(自然语言处理)技术