我編寫了一個代碼來生成隨機(jī)數(shù)并刪除重復(fù)的,如下所示:package mainimport ( "fmt" "math/rand" "time")func main() { list := [7]int{} for i := 0; i < 7; i++ { here: rand.Seed(time.Now().UnixNano()) s := rand.Intn(16) fmt.Println(s) if s != list[0] && s != list[1] && s != list[2] && s != list[3] && s != list[4] && s != list[5] && s != list[6] { list[i] = s } else { goto here } } fmt.Println("list:", list)}我注意到有很多重復(fù)的代碼,例如:s!=list[0]&&list[1]但是當(dāng)我寫信給:s!=list[0:6]這是錯誤的,我該如何正確地做到這一點?
3 回答

青春有我
TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊
將其存儲在地圖中。
像那樣
rndmap := make(map[int]bool)
for len(rndmap) < YOUR_LEN {
rndmap[rand.Intn(YOUR_MAX_RAND)] = true
}
結(jié)果映射永遠(yuǎn)不會存儲重復(fù)的索引。
您可以像這樣將其轉(zhuǎn)換為切片
rndslice := make([]int,0)
for i, _ := range rndmap {
rndslice = append(rndslice, i)
}

Cats萌萌
TA貢獻(xiàn)1805條經(jīng)驗 獲得超9個贊
您可以使用標(biāo)準(zhǔn)庫生成隨機(jī)元素,而無需首先進(jìn)行任何重復(fù)。
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println(rand.Perm(16)[:7])
}
- 3 回答
- 0 關(guān)注
- 792 瀏覽
添加回答
舉報
0/150
提交
取消