亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

golang convert slice{0,1,2,3,4} to slice{1,2,3}?

golang convert slice{0,1,2,3,4} to slice{1,2,3}?

Go
慕森卡 2022-09-05 09:59:03
我有字符串的動態切片,例如{“0s”,“1s”,“2s”,“3s”,“4s”}。我有動態索引切片,例如{1,2,3}。所以我只需要切片中索引為1,2和3的元素。請注意,索引切片和數據切片都是動態的。package mainimport (    "fmt")func main() {    indexes := []uint8{1, 2, 3}              //dynamic slice. maybe different elements and count    data := []string{"0s", "1s", "2s", "3s", } //dynamic slice. maybe different elements and count    // I need convert data to {"1s", "2s", "3s"} using indexes (dynamic) slice    fmt.Println(data)    fmt.Println(indexes)}這里 游樂場 網址 https://play.golang.org/p/Vj0Vl5va4LP
查看完整描述

4 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

要使用從索引切片檢索到的索引值創建新的數據切片,必須迭代索引切片并將索引切片作為數據切片傳遞。下面是具有此邏輯的代碼valueindex


package main


import (

    "fmt"

)


func main() {

    indexes := []uint8{1, 2, 3}

    data := []string{"0s", "1s", "2s", "3s"}

    var newData []string


    fmt.Println(data)

    fmt.Println(indexes)


    for _, v2 := range indexes {


        newData = append(newData, data[v2])

    }

    fmt.Println(newData)

}

輸出:


[0s 1s 2s 3s]

[1 2 3]

[1s 2s 3s]


查看完整回答
反對 回復 2022-09-05
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

請注意 - 您的索引切片是類型 - 這很好,但限制為最大長度為256的切片。這可能是設計使然,但只是需要注意的事情。[]uint8


這里使用的其他解決方案 - 這對于小切片來說很好。但一般來說,在處理切片時,如果您知道最終的切片長度,最好預先分配并直接寫入索引,以避免可能執行多次重新分配:appendappend


func correlate(vs []string, is []uint8) (s []string) {

    s = make([]string, len(is)) // pre-allocate results length - to avoid using append


    for j, i := range is {

        s[j] = vs[i]

    }

    return

}

https://play.golang.org/p/Et2VyoZzo59


查看完整回答
反對 回復 2022-09-05
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

下面是一個通用解決方案,它僅檢索匹配的元素,如果超出范圍,則丟棄。https://play.golang.org/p/34vQnNh0jd4


func getElementsByIndexes(data []string, indexes []uint8) []string {

    res := make([]string, 0)

    l := len(data)

    

    for _, v := range indexes { 

        // discard if out of range

        if int(v) >= l {

            continue

        }

    

        res = append(res, data[int(v)])

    }


    return res

}


查看完整回答
反對 回復 2022-09-05
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

我來到了這個非常簡單的解決方案:


func filterByIndexes(sl []string, ind []int)[]string{

var filteredSlice []string

for index := range ind{

    // you may want to check for index out of range :)

    filteredSlice = append(filteredSlice, sl[index])

}

return filteredSlice

}


如前所述,您可能希望檢查索引是否超出范圍!


查看完整回答
反對 回復 2022-09-05
  • 4 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號