最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn)

 更新時(shí)間:2021年12月26日 10:54:25   作者:董洪臣  
本文主要介紹了golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

目前接到一個(gè)推薦數(shù)據(jù)的需求,需要將數(shù)據(jù)庫(kù)中獲取到的數(shù)據(jù)進(jìn)行隨機(jī)排序后返回給用戶??紤]了一下,有兩種使用方式,一種是通過(guò)數(shù)據(jù)庫(kù) order by rand() ,還有一種就是本文需要使用到的代碼處理

具體實(shí)現(xiàn)步驟如下

1.引入庫(kù)

代碼如下:

import (
 "fmt"
 "math/rand"
 "time"
)

2.組裝數(shù)據(jù)并排序(方案一)

代碼如下:

type CategoryEntity struct {
 GrouponId     int64  //團(tuán)ID
 MerchandiseId int64  //商品ID
 CategoryId    int64  //分類ID
 CategoryTitle 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: "調(diào)料調(diào)味"}
 data[2] = CategoryEntity{GrouponId: 2, MerchandiseId: 1117822, CategoryId: 746, CategoryTitle: "水果"}
 data[3] = CategoryEntity{GrouponId: 3, MerchandiseId: 1115770, CategoryId: 1408, CategoryTitle: "個(gè)人護(hù)理"}
 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: "糧油調(diào)味"}
 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("隨機(jī)前:", data)
 //如果不使用rand.Seed(seed int64),每次運(yùn)行,得到的隨機(jī)數(shù)會(huì)一樣
 rand.Seed(time.Now().Unix())
 //采用rand.Shuffle,將切片隨機(jī)化處理后返回
 rand.Shuffle(len(data), func(i, j int) { data[i], data[j] = data[j], data[i] })
 fmt.Println("隨機(jī)后:", data)
}

3.組裝數(shù)據(jù)并排序(方案二)

代碼如下:

type CategoryEntity struct {
 GrouponId     int64  //團(tuán)ID
 MerchandiseId int64  //商品ID
 CategoryId    int64  //分類ID
 CategoryTitle 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: "調(diào)料調(diào)味"}
 data[2] = CategoryEntity{GrouponId: 2, MerchandiseId: 1117822, CategoryId: 746, CategoryTitle: "水果"}
 data[3] = CategoryEntity{GrouponId: 3, MerchandiseId: 1115770, CategoryId: 1408, CategoryTitle: "個(gè)人護(hù)理"}
 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: "糧油調(diào)味"}
 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("隨機(jī)前:", data)
 //如果不使用rand.Seed(seed int64),每次運(yùn)行,得到的隨機(jī)數(shù)會(huì)一樣
 rand.Seed(time.Now().Unix())
 length := len(data)
 for i := 0; i < length; i++ {
  exchange(data, rand.Intn(length), i)
 }

 fmt.Println("隨機(jī)后:", data)
}

// 交換數(shù)據(jù)
func exchange(data []CategoryEntity, i, j int) {
 data[i], data[j] = data[j], data[i]
}

總結(jié)

整體比較簡(jiǎn)單,但是需要注意的有兩點(diǎn):

1:golang中 rand的使用方式,如果不使用rand.Seed(seed int64),每次運(yùn)行,得到的隨機(jī)數(shù)會(huì)一樣

2:方案一種采用rand.Shuffle+匿名函數(shù),將切片隨機(jī)化處理后返回。

3:方案二使用golang特有的數(shù)組交換方式:

func exchange(data []CategoryEntity, i, j int) {
 data[i], data[j] = data[j], data[i]
}

到此這篇關(guān)于golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)golang 數(shù)組隨機(jī)排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go解析YAML文件(多文檔解析)

    go解析YAML文件(多文檔解析)

    本文介紹了如何使用GO語(yǔ)言和client-go庫(kù)處理YAML文件,特別是在Kubernetes環(huán)境下,分析了YAML的特點(diǎn),如簡(jiǎn)潔性、易讀性、可嵌套性等,并展示了相關(guān)代碼實(shí)現(xiàn),包括單文檔和多文檔的處理方法,感興趣的可以了解一下
    2024-10-10
  • GO語(yǔ)言基礎(chǔ)庫(kù)os包的函數(shù)全面解析

    GO語(yǔ)言基礎(chǔ)庫(kù)os包的函數(shù)全面解析

    這篇文章主要為大家介紹了GO語(yǔ)言基礎(chǔ)庫(kù)os包的函數(shù)全面解析, 有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 詳解go語(yǔ)言判斷管道是否關(guān)閉的常見誤區(qū)

    詳解go語(yǔ)言判斷管道是否關(guān)閉的常見誤區(qū)

    這篇文章主要想和大家一起探討一下在Go語(yǔ)言中,我們是否可以使用讀取管道時(shí)的第二個(gè)返回值來(lái)判斷管道是否關(guān)閉,文中的示例代碼講解詳細(xì),有興趣的可以了解下
    2023-10-10
  • golang整合jwt的實(shí)現(xiàn)示例

    golang整合jwt的實(shí)現(xiàn)示例

    json web tokens(jwt)已成為大多數(shù)web api設(shè)計(jì)中的常見身份驗(yàn)證和授權(quán)方案之一,本文主要介紹了golang整合jwt的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • gin自定義中間件解決requestBody不可重讀(請(qǐng)求體取值)

    gin自定義中間件解決requestBody不可重讀(請(qǐng)求體取值)

    這篇文章主要介紹了gin自定義中間件解決requestBody不可重讀,確??刂破髂軌颢@取請(qǐng)求體值,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • GO語(yǔ)言常用的文件讀取方式

    GO語(yǔ)言常用的文件讀取方式

    這篇文章主要介紹了GO語(yǔ)言常用的文件讀取方式,涉及一次性讀取、分塊讀取與逐行讀取等方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • 使用Go構(gòu)建一款靜態(tài)分析工具Owl詳解

    使用Go構(gòu)建一款靜態(tài)分析工具Owl詳解

    Owl是一款開源項(xiàng)目依賴分析工具,可以快速在指定的項(xiàng)目目錄下查找符合某些特征的源代碼文件或者依賴文件,這篇文章主要介紹了使用Go構(gòu)建一款靜態(tài)分析工具,需要的朋友可以參考下
    2022-06-06
  • 剖析Go編寫的Socket服務(wù)器模塊解耦及基礎(chǔ)模塊的設(shè)計(jì)

    剖析Go編寫的Socket服務(wù)器模塊解耦及基礎(chǔ)模塊的設(shè)計(jì)

    這篇文章主要介紹了Go的Socket服務(wù)器模塊解耦及日志和定時(shí)任務(wù)的模塊設(shè)計(jì),舉了一些Go語(yǔ)言編寫的服務(wù)器模塊的例子,需要的朋友可以參考下
    2016-03-03
  • go如何優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)

    go如何優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)

    這篇文章主要為大家介紹了go優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • go 指針接收者和值接收者的區(qū)別小結(jié)

    go 指針接收者和值接收者的區(qū)別小結(jié)

    在Go 語(yǔ)言中,值接收者和指針接收者是方法定義中的兩種接收者類型,本文主要介紹了go 指針接收者和值接收者的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04

最新評(píng)論

墨玉县| 平陆县| 昭苏县| 江安县| 额济纳旗| 靖江市| 麻栗坡县| 新竹县| 延津县| 环江| 明溪县| 朝阳区| 济南市| 隆昌县| 南木林县| 花莲市| 牙克石市| 亳州市| 荣成市| 灌阳县| 万宁市| 囊谦县| 体育| 会宁县| 柳河县| 长治市| 宝兴县| 团风县| 寿宁县| 临泽县| 磴口县| 疏勒县| 旌德县| 大邑县| 安义县| 岑溪市| 金平| 万州区| 潞西市| 项城市| 武安市|