2017-06-15 87 views
-2

因此,计划是在片中有一个字符串,例如“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) 
     } 
    } 
} 
+0

我不能肯定你的计划有什么用,但你可以使用[]字节不是[]字符串会更好。 –

+0

最终的结果是试图创建类似于nonce的东西。因此,我将生成一个哈希值并继续追加1,2,3,...等数字(例如不是0123),直到哈希值开始于4 0。 – Alanay

回答

1

您可以通过执行转换的[]string到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) 
    } 
} 
+0

感谢您的答案,尽管我遗漏了我需要将我(int)也转换为字符串。你能以类似的方式做到吗? – Alanay

+0

感谢您的更新评论。我忘了我需要摆脱之前添加的(i)。否则,我得到的东西就像[a 1 2 3] [a 1 2 3 4]等等,而不是[a 1] [a 2] – Alanay

+0

请注意strings.Join()并不便宜,特别是如果片开始获取很长或者有很长的字符串。它的FAR比使用'+'(或'+ =')追加便宜,但字符串的不变性仍然意味着在每个字符串上分配一个全新的字节数组(大小等于字符串切片中的长度总和)单个字符串。加入()调用。 – Kaedys

相关问题