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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

Go
猛跑小豬 2023-03-15 15:02:19
我在下面發(fā)布的代碼是最低可重現(xiàn)版本,因為我一直在嘗試找出問題所在。我來自 Python,出于性能原因需要在 Go 中重寫此腳本,特別是使用我從示例中刪除的并行化。問題是我將 N 個值傳遞給排序函數(shù)并獲得 >N 個返回值。它在第一個外循環(huán)中為每次迭代創(chuàng)建一個新切片,并且似乎忽略了if !message1.Grouped 條件。我沒有太多使用 Go 的經(jīng)驗,也沒有使用 Python 的經(jīng)驗。message2.Grouped = true我假設(shè)它與無論出于何種原因都無法被外循環(huán)看到的設(shè)置有關(guān)。最終我試圖忽略已經(jīng)在循環(huán)中早些時候分組的“消息”。旁注:我知道這個腳本中的隨機(jī)數(shù)不起作用,因為我沒有設(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)驗 獲得超2個贊

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


要么將指針存儲在切片中(元素仍將被復(fù)制,但元素現(xiàn)在將是指向相同結(jié)構(gòu)值的指針),要么通過索引表達(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)


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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