2017-06-15 4 views
-2

Also der Plan ist, eine Zeichenfolge wie "a" in der Scheibe zu haben, und einmal, dass in "a100" zum Beispiel wird dann stoppen Sie eine for-Schleife, die Zahlen an das Ende davon fügt. Wenn ich den folgenden Code versuche, sagt es "(nicht übereinstimmende Typen [] String und String)", ist dies, weil ich das Segment in eine Zeichenfolge konvertieren muss? Wenn ja, wie mache ich das? Vielen Dank.Wie überprüft man, ob angehängte Slice gleich einer Zeichenkette ist?

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

mir nicht sicher bin, was Ihr Plan mit diesem ist, aber Sie können besser dran. –

+0

Das Endergebnis ist, etwas Ähnliches wie ein Nonce zu erstellen. Also erzeuge ich einen Hash und hänge Zahlen von 1, 2, 3 ... 123 usw. an (nichtzum Beispiel), bis der Hash mit 4 0 beginnt. – Alanay

Antwort

1

Sie können eine []string zu einem string` konvertieren, indem Sie:

import "strings" 

//... 

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

Sie müssen auch würden Sie strconv.Itoa verwenden, um eine string, höchstwahrscheinlich i (int) konvertieren. Am Ende würden Sie Code wie folgt aussehen: 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) 
     } 
    } 
} 

Obwohl, können Sie auch nicht nur ein Array verwenden und direkt an die Saite (oder [] byte) anhängen ...

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) 
     } 
    } 
} 

Zum zurücksetzen jedes Mal, wenn der Array, nur die Hauptmethode machen: mit [] Byte nicht [] string

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

Danke für die Antwort, obwohl ich weggelassen habe, muss ich das i (int) auch in eine Zeichenfolge konvertieren. Kannst du das ähnlich machen? – Alanay

+0

Danke für den aktualisierten Kommentar. Ich habe vergessen, dass ich das zuvor hinzugefügte (i) von der Scheibe entfernen musste. Sonst bekomme ich Dinge wie [a 1 2 3] [a 1 2 3 4] usw. Statt [a 1] [a 2] – Alanay

+0

Beachten Sie, dass strings.Join() nicht gerade billig ist, vor allem, wenn die Scheibe anfängt, zu werden ziemlich lang oder hat lange Saiten drin. Es ist viel billiger als Anhängen mit '+' (oder '+ ='), aber die Unveränderlichkeit von Strings bedeutet immer noch, dass Sie ein ganzes neues Byte-Array (mit Größe gleich der Summe der Längen im String-Slice) zuweisen single strings.Join() Aufruf. – Kaedys

Verwandte Themen