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

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

從切片中刪除字符串切片

從切片中刪除字符串切片

Go
MM們 2022-11-23 20:28:55
我想從切片中刪除切片范圍,例如從“A”到“Z”中刪除“A”、“B”,但我想讓它更有效率(我不知道為什么在 Go 中,但在 Python 中我們可以使用 hashmap ).下面的代碼是我能得到的最接近的代碼,但我錯過了一些邊緣情況:func removeString(listOri []string, targetDelete []string) []string {    newitems := []string{}    for i := range listOri {        for j := range targetDelete {            if listOri [i] != targetDelete[j] {                newitems = append(newitems, listOri [i])            }        }    }    return newitems}listOriginal := []string{"A", "B", "C", "D"}listDelete := []string{"A", "B"}listNew := removeString(listOriginal, listDelete)result = "A","B","C","C","D","D"
查看完整描述

2 回答

?
慕的地10843

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

最好(更快)使用地圖來表示要刪除的項目。如果原始列表中有 N 個東西,待刪除列表中有 M 個東西,您的代碼(一旦錯誤被修復)將在 O(NM) 時間內運行,而基于地圖的解決方案將在準時。


這是示例代碼:


package main


import "fmt"


func filter(src []string, del map[string]bool) []string {

    var dst []string

    for _, s := range src {

        if !del[s] {

            dst = append(dst, s)

        }

    }

    return dst

}


func main() {

    src := []string{"A", "B", "C", "D"}

    del := map[string]bool{"A": true, "B": true}

    fmt.Println(filter(src, del))

}

如果確實需要將待刪除的東西做成slice,那么應該先將slice轉為map。那么代碼就是O(N+M)次了。


查看完整回答
反對 回復 2022-11-23
?
狐的傳說

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

您需要做的是檢查原始項目中的每個項目是否存在于要刪除的項目列表中,如果不存在,則將其添加到結果中:


func removeString(listOri []string, targetDelete []string) []string {

    newitems := []string{}

    var found bool


    for i := range listOri {

        found = false

        for j := range targetDelete {

            if listOri[i] == targetDelete[j] {

                found = true

                break

            }

        }

        if !found {

            newitems = append(newitems, listOri[i])

        }

    }


    return newitems

}

您可能還會發現Go 是否具有類似于 Python 的“if x in”構造?翔實的。


查看完整回答
反對 回復 2022-11-23
  • 2 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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