2 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
假設(shè)您想在適當(dāng)?shù)奈恢孟磁疲梢岳脴?biāo)準(zhǔn)庫rand Shuffle。
為此,您需要提供牌組的長度以及交換功能,以便洗牌功能能夠真正洗牌。
我們還可以添加一個(gè) for 循環(huán)來添加任意次數(shù)的隨機(jī)播放功能。
這可以通過這個(gè)來完成
func (d *Deck) shuffleN(n int) {
for k := 0; k < n; k++ {
rand.Shuffle(len(d), func(i, j int) {
d[i], d[j] = d[j], d[i]
})
}
}

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
在 Go 中,方法只能更改結(jié)構(gòu)的值,只有當(dāng)它們將其作為指針接收時(shí)才會(huì)調(diào)用它們。請(qǐng)參閱示例:方法。
如果您將接收者shuffle()設(shè)為(d *Deck)(指向甲板的指針),則該方法可以改變(洗牌)甲板本身,而不是返回一個(gè)新的 shuffled Deck。然后,在方法主體中,您需要將您的分配finalDeck給d而不是返回它(或在d沒有輔助甲板的情況下就地工作)。每次你打電話時(shí)anyDeck.shuffle(),它都會(huì)改變anyDeck,所以你會(huì)做n幾次。
注意:如果您打算使shuffle()外部main包(公共)可用,則需要以 capital 開頭S。我將在下面的“偽代碼”中使用它:
func (d *Deck) Shuffle() {
// shuffle d here (and it will change the deck .Shuffle() was called on)
}
// somewhere else in code
...
deck := Deck{}
deck.Shuffle()
從那里您可以擴(kuò)展func Shuffle(n int)以n在函數(shù)體中進(jìn)行洗牌次數(shù)和嵌入輪次(或者您可以將func ShuffleN(n int)其調(diào)用原始Shuffle() n時(shí)間。
- 2 回答
- 0 關(guān)注
- 115 瀏覽
添加回答
舉報(bào)