2 回答
TA贡献1848条经验 获得超2个赞
只是在循环条件下过度工程化。尝试
for lineNumber := 0; lineNumber <= LongestSlice(stuff)-1; lineNumber++ {在 func joinStrings 的外循环中。看到它有效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 关注
- 206 浏览
添加回答
举报
