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

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

如何檢查切片中的元素并操作另一個切片(如果值存在或不存在)

如何檢查切片中的元素并操作另一個切片(如果值存在或不存在)

Go
海綿寶寶撒 2023-07-17 16:25:33
我正在用 Go 編寫一個程序,它應該檢查切片的名稱。如果該名稱存在,則應在另一個切片中輸入“YES”,如果不存在則應輸入“NO”。名稱切片應由用戶輸入,并且應在輸入值時開始檢查。我寫了一些代碼,但似乎不起作用。package mainimport (    "fmt")func main() {    var limit int    var names string    fmt.Scanln(&limit)    arr := make([]string, limit)    yn := make([]string, limit)    for i := 0; i < limit; i++ {        fmt.Scanln(&names)        for _, a := range arr {            if a == names {                yn = append(yn, "YES")            } else {                arr = append(arr, names)                yn = append(yn, "NO")            }        }    }    fmt.Println(yn)}輸出應該是這樣的用戶輸入的值:5史蒂夫約翰雷恩珍娜約翰輸出:不不不不是的我得到的錯誤是一個由一堆 YES 和 NO 值組成的大數組,開頭有 2 個空元素。
查看完整描述

1 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

第一個解決方案

這就是你想要的:


func main() {


    var limit int

    var name string

    _, err := fmt.Scanln(&limit)

    if err != nil {

        fmt.Println(err)

    }


    var names []string

    var presence []string


    for i := 0; i < limit; i++ {


        _, err := fmt.Scanln(&name)

        if err != nil {

            fmt.Println(err)

        }


        var exist = false

        for _, a := range names {

            if a == name {

                exist = true

                break

            }

        }


        if !exist {

            names = append(names, name)

            presence = append(presence, "NO")

        } else {

            presence = append(presence, "YES")

        }

    }

    fmt.Println(presence)

}

首先Scanln返回 ,error您需要檢查它。

第二:追加到數組必須在內循環之外。嘗試使用 debugPrintln()來調試您的算法。

將代碼移至單獨的函數

為了清楚起見,我建議將存在性檢查移至單獨的函數:


func exists(a []string, element string) bool {

    for _, e := range a {

        if e == element {

            return true

        }

    }


    return false

}


func main() {

    var limit int

    var name string

    _, err := fmt.Scanln(&limit)

    if err != nil {

        fmt.Println(err)

    }


    var names []string

    var presence []string


    for i := 0; i < limit; i++ {


        _, err := fmt.Scanln(&name)

        if err != nil {

            fmt.Println(err)

        }


        if !exists(names, name) {

            names = append(names, name)

            presence = append(presence, "NO")

        } else {

            presence = append(presence, "YES")

        }

    }

    fmt.Println(presence)

}

優化

在前面的代碼中,我們在每次循環中將字符串數組傳遞給函數。如果數組更大,那就不好了,最好將指向字符串數組的指針傳遞給函數(或指向字符串的指針數組)。


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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