Как проверить, равен ли добавленный фрагмент строке?

Таким образом, план состоит в том, чтобы в срезе была строка, такая как "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 ответ

Решение

Вы можете конвертировать []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)
        }
    }
}

Чтобы сбросить массив каждый раз, просто сделайте метод main:

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)
    }
}
Другие вопросы по тегам