Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk memilih item secara rawak daripada kepingan yang berat sebelah ke arah satu hujung kepingan menggunakan Go?
Saya faham cara untuk memilih nilai rawak daripada go
中的 slice
:
rand.Seed(time.Now().UTC().UnixNano()) var db [500]string log.Println(db[rand.Intn(len(db))])
Tetapi bagaimana saya boleh mendapatkan ini daripada slice
中选择一个随机项目,并偏向 slice
的一端?对于我的用例,我将拥有一个 slice
,它使用 append()
随着时间的推移而增长。我的理解是,最新的项目将添加到 slice
的右侧。我想创建一个函数,从 slice
中选择一个随机项目,并偏向 slice
的最新成员。我的第一个猜测是通过 rand.normfloat64()
使用 正态分布
, tetapi saya tidak pasti bagaimana atau sama ada saya boleh menggunakannya untuk mencapai ini.
Fungsi ini sepatutnya boleh memuatkan item baru dari slice
中选取任何项目,但应该以更高的频率选取添加到 slice
.
Dengan mengandaikan anda berpuas hati dengan pengedaran normal, anda boleh menggunakan rand.normfloat64(). Jika tatasusunan anda mempunyai 20 item:
int(math.abs(rand.normfloat64())*10) % 20
Akan menjana nombor berwajaran ke arah permulaan senarai. Dan
20 - int(math.abs(rand.normfloat64())*10) % 20
akan menjana nombor berwajaran menjelang akhir senarai.
Ini adalah contoh yang menunjukkan pengedaran sampel secara rawak. Taman permainan mudah alih: https://www.php.cn/link/34ff028fc02b773b8885b59aee142e60
package main import ( "fmt" "math" "math/rand" ) func main() { var buckets [20]int for i := 0; i < 1000; i++ { r := int(math.abs(rand.normfloat64())*10) % 20 buckets[r]++ } fmt.println(buckets) }
Sampel output:
[86 92 76 80 73 69 60 69 58 51 47 38 44 30 29 24 19 27 18 10]
Ia adalah secara rawak, jadi anda masih boleh mendapatkan semua item ekor...
Jika anda mahukan fungsi step di mana nombor pada separuh pertama adalah 10 kali ganda nombor di separuh kiri, hanya gunakan dua nombor rawak.
n := rand.intn(10) if rand.float64() < 0.1 { n = n + 10 }
pergi contoh taman permainan: https://www.php.cn/link/d5c82d99f0edb85fc94ffa4204146aad
package main import ( "fmt" "math/rand" ) func main() { var buckets [20]int for i := 0; i < 1000; i++ { r := rand.Intn(10) if rand.Float64() < 0.1 { r = r + 10 } buckets[r]++ } fmt.Println(buckets) }
Contoh output
[96 92 89 89 88 78 95 86 83 98 15 10 15 10 10 12 4 11 11 8]
Atas ialah kandungan terperinci Bagaimana untuk memilih item secara rawak daripada kepingan yang berat sebelah ke arah satu hujung kepingan menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!