如何检查附加切片是否等于字符串?

时间:2017-06-15 17:16:16

标签: string go slice

所以计划是要有一个字符串,如" a"在切片中,一旦变成" a100"例如,然后停止运行一个for循环,它将数字添加到它的末尾。当我尝试下面的代码时,它说"(不匹配的类型[]字符串和字符串)",这是因为我必须将切片转换为字符串?如果是这样,我该怎么做?感谢。

package main

import "fmt"

func main() {
    var s []string
    s = append(s, "a")
    fmt.Println(s)
    for i := 0; i <= 1000; i++ {
        s = append(s, i)
        if s == "a10" {
            fmt.Println("Worked", s)
        } else {
            fmt.Println(s)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作将[]string转换为字符串`:

import "strings"

//...

if strings.Join(s, "") == "a10" {
      fmt.Println("Worked", s)
} else {
      fmt.Println(s)
}

您还需要将i(一个int)转换为string,很可能您会使用strconv.Itoa。最后,您的代码看起来像这样:https://play.golang.org/p/gD5b5XFimJ

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    var s []string
    s = append(s, "a")
    fmt.Println(s)
    for i := 0; i <= 1000; i++ {
        s = append(s, strconv.Itoa(i))
        if strings.Join(s, "") == "a01" {
            fmt.Println("Worked", s)
            return
        } else {
            fmt.Println(s)
        }
    }
}

虽然,您也可以不使用数组并直接附加到字符串(或[]字节)...

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var s := "a"
    fmt.Println(s)
    for i := 0; i <= 1000; i++ {
        s += strconv.Itoa(i)
        if s == "a01" {
            fmt.Println("Worked", s)
            return
        } else {
            fmt.Println(s)
        }
    }
}

要每次重置数组,只需制作主方法:

for i := 0; i <= 1000; i++ {
    s := []string{"a"}
    s = append(s, strconv.Itoa(i))
    if strings.Join(s, "") == "a10" {
        fmt.Println("Worked", s)
        return
    } else {
        fmt.Println(s)
    }
}