2 回答
TA貢獻1848條經驗 獲得超2個贊
只是在循環條件下過度工程化。嘗試
for lineNumber := 0; lineNumber <= LongestSlice(stuff)-1; lineNumber++ {在 func joinStrings 的外循環中??吹剿行?a >https://play.golang.org/p/eR4JJtY4T1
TA貢獻1880條經驗 獲得超4個贊
對于您要完成的工作,您的解決方案似乎過于復雜。一種簡單的方法是接受 evanmcdonnal 的建議并使用映射來定義整數如何轉換為相應的字符串常量,如下所示:
var integerToStr = map[int]string{
0: zero,
1: one,
2: two,
3: three,
4: four,
5: five,
6: six,
7: seven,
8: eight,
9: nine,
}
...在這種情況下,您可以像這樣轉換整數:
if str, present := integerToStr[i]; present {
// do something with the string
} else {
// default to something else?
}
如果你不喜歡包范圍內的變量,你也可以使用 switch 語句在函數內部做同樣的事情:
var glyph string
switch num {
case "1":
glyph = one
case "2":
glyph = two
case "3":
glyph = three
case "4":
glyph = four
case "5":
glyph = five
case "6":
glyph = six
case "7":
glyph = seven
case "8":
glyph = eight
case "9":
glyph = nine
case "0":
fallthrough
default:
glyph = zero
}
我還建議為您的字母制定一個標準高度,并將其與字符串本身保持一致。這使您可以通過創建一個固定長度的數組,將每個字符串的相應行附加到該數組的每個成員,然后將其轉換為切片并使用“strings.Join”來完成加入最后的字符串:
var out [glyphHeight]string
for _, glyph := range glyphs {
for i, line := range strings.Split(glyph, "\n") {
out[i] += " " + line
}
}
return strings.Join(out[:numGlyphLines], "\n")
我認為值得一提的另一件有點迂腐的事情是,您錯誤地將字符串稱為 ASCII。Go 實際上使用 UTF 作為其字符串。在這個例子中它并不重要,但你應該記住這一點。
- 2 回答
- 0 關注
- 203 瀏覽
添加回答
舉報
