String 如何检查附加的切片是否等于字符串?
因此,我们的计划是在切片中包含一个字符串,例如“a”,一旦它变成“a100”,那么就停止运行一个for循环,该循环将数字添加到它的末尾。当我尝试下面的代码时,它会显示“(不匹配的类型[]字符串和字符串)”,这是因为我必须将切片转换为字符串吗?如果是,我该怎么做?谢谢String 如何检查附加的切片是否等于字符串?,string,go,slice,String,Go,Slice,因此,我们的计划是在切片中包含一个字符串,例如“a”,一旦它变成“a100”,那么就停止运行一个for循环,该循环将数字添加到它的末尾。当我尝试下面的代码时,它会显示“(不匹配的类型[]字符串和字符串)”,这是因为我必须将切片转换为字符串吗?如果是,我该怎么做?谢谢 package main import "fmt" func main() { var s []string s = append(s, "a") fmt.Println(s) for i :=
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)
}
}
}
主程序包
输入“fmt”
func main(){
var s[]字符串
s=附加(s,“a”)
fmt.Println(s)
对于i:=0;i您可以通过执行以下操作将[]字符串
转换为字符串`:
import "strings"
//...
if strings.Join(s, "") == "a10" {
fmt.Println("Worked", s)
} else {
fmt.Println(s)
}
您还需要将i
(一个int)转换为字符串
,最有可能使用的是strconv.Itoa
。最后,您编写的代码如下所示:
主程序包
进口(
“fmt”
“strconv”
“字符串”
)
func main(){
var s[]字符串
s=附加(s,“a”)
fmt.Println(s)
对于i:=0;我感谢您的回答,尽管我遗漏了我也需要将i(int)转换为字符串。您可以用类似的方法进行转换吗?谢谢您的更新评论。我忘记了我需要从切片中删除先前添加的(i)。否则我会得到像[a23][a234]之类的东西,而不是[a1][a2]请注意,strings.Join()并不便宜,特别是当切片开始变得相当长或其中包含长字符串时。它比使用+
(或+=
)追加要便宜得多,但字符串的不可变性仍然意味着您要分配一个完整的新字节数组(大小等于字符串切片中长度的总和)在每个strings.Join()调用上。我不确定您的计划是什么,但您最好使用[]字节而不是[]字符串。最终结果是尝试创建类似于nonce的内容。因此,我将生成一个散列,并不断追加1、2、3…123等的数字(例如不是0123),直到散列以4 0开头。
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)
}
}