Go如何对Slice数据进行shuffle(重新洗牌)

我们经常会用到shuffle,譬如我们希望将热点数据打散分部,或者公平抽签等,都需要一个完全无序的数据集。

Go如何对Slice数据进行shuffle(重新洗牌)

如果是老版Go(1.10)之前,需要自动撸一个,随意生成一个数,然后替换两个元素的位置,代码如下:

a := []int{1, 2, 3, 4, 5, 6, 7, 8}
rand.Seed(time.Now().UnixNano())
for i := len(a) - 1; i > 0; i-- {
    j := rand.Intn(i + 1)
    a[i], a[j] = a[j], a[i]
}

如果是新版本Go就简单了,可以直接通过rand包的Shuffle方法直接帮我们混淆排序。

a := []int{1, 2, 3, 4, 5, 6, 7, 8}
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] })

执行的效果如下:

3, 5, 8, 2, 1, 4, 7, 6

本质上两种方式,都是利用了rand生成随机数,然后替换数组中元素的位置。从而达到重新洗牌的目的。

展开阅读全文

页面更新:2024-03-21

标签:目的   随机数   数据   热点   分部   个数   元素   随意   公平   位置   两个   效果   代码   简单   方式   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top