第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么我的排序函數(shù)返回的值多于輸入值

為什么我的排序函數(shù)返回的值多于輸入值

Go
猛跑小豬 2023-03-15 15:02:19
我在下面發(fā)布的代碼是最低可重現(xiàn)版本,因?yàn)槲乙恢痹趪L試找出問(wèn)題所在。我來(lái)自 Python,出于性能原因需要在 Go 中重寫此腳本,特別是使用我從示例中刪除的并行化。問(wèn)題是我將 N 個(gè)值傳遞給排序函數(shù)并獲得 >N 個(gè)返回值。它在第一個(gè)外循環(huán)中為每次迭代創(chuàng)建一個(gè)新切片,并且似乎忽略了if !message1.Grouped 條件。我沒有太多使用 Go 的經(jīng)驗(yàn),也沒有使用 Python 的經(jīng)驗(yàn)。message2.Grouped = true我假設(shè)它與無(wú)論出于何種原因都無(wú)法被外循環(huán)看到的設(shè)置有關(guān)。最終我試圖忽略已經(jīng)在循環(huán)中早些時(shí)候分組的“消息”。旁注:我知道這個(gè)腳本中的隨機(jī)數(shù)不起作用,因?yàn)槲覜]有設(shè)置新種子,但這不是重點(diǎn),不是我實(shí)際腳本的一部分package mainimport (    "fmt"    "math/rand")type (    BoolInt struct {        Val int        Grouped bool    })func sort_chunk_no_p(chunk []BoolInt) [][]BoolInt {    COSINE_THRESHOLD := 0.90    allGroups := [][]BoolInt{}    for i, message1 := range chunk {        if !message1.Grouped {            message1.Grouped = true            tempGroup := []BoolInt{message1}            for _, message2 := range chunk[i+1:] {                if !message2.Grouped {                    if rand.Float64() >= COSINE_THRESHOLD {                        message2.Grouped = true                        tempGroup = append(tempGroup, message2)                    }                   }            }            allGroups = append(allGroups, tempGroup)        }    }    return allGroups}func main() {    lo, hi := 1, 100    allMessages := make([]BoolInt, hi-lo+1)    for i := range allMessages {        allMessages[i].Val = i + lo        allMessages[i].Grouped = false    }    sorted_chunk := sort_chunk_no_p(allMessages)    fmt.Println(sorted_chunk)    sum := 0    for _, res := range sorted_chunk {        sum += len(res)    }    fmt.Println(sum)}
查看完整描述

1 回答

?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

當(dāng)您迭代一個(gè)切片時(shí),所有元素都被復(fù)制到一個(gè)單獨(dú)的、可重復(fù)使用的循環(huán)變量中。這意味著如果您修改此副本的字段,則切片中的元素不會(huì)受到影響。


要么將指針存儲(chǔ)在切片中(元素仍將被復(fù)制,但元素現(xiàn)在將是指向相同結(jié)構(gòu)值的指針),要么通過(guò)索引表達(dá)式修改元素,例如chunk[i].Grouped = true.


使用指針這就是它的樣子:


func sort_chunk_no_p(chunk []*BoolInt) [][]*BoolInt {

    COSINE_THRESHOLD := 0.90

    allGroups := [][]*BoolInt{}

    for i, message1 := range chunk {

        if !message1.Grouped {

            message1.Grouped = true

            tempGroup := []*BoolInt{message1}

            for _, message2 := range chunk[i+1:] {

                if !message2.Grouped {

                    if rand.Float64() >= COSINE_THRESHOLD {

                        message2.Grouped = true

                        tempGroup = append(tempGroup, message2)

                    }

                }


            }

            allGroups = append(allGroups, tempGroup)

        }

    }

    return allGroups

}

并稱它為:


allMessages := make([]*BoolInt, hi-lo+1)

for i := range allMessages {

    allMessages[i] = &BoolInt{Val: i + lo}

}


sorted_chunk := sort_chunk_no_p(allMessages)


查看完整回答
反對(duì) 回復(fù) 2023-03-15
  • 1 回答
  • 0 關(guān)注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)