weekly.2011-10-18
Контейнер / векторный пакет был удален. Ломтики лучше.
SliceTricks: как делать векторные вещи с кусочками.
Я пересмотрел ваш convertToLCD
код , чтобы повысить производительность: 5745 нс / операционный против 19 003 нс / операционный
package main
import (
"fmt"
"strconv"
)
const (
lcdNumerals = `
_ _ _ _ _ _ _ _
| | | _| _||_||_ |_ ||_||_|
|_| ||_ _| | _||_| ||_| _|
`
lcdWidth = 3
lcdHeight = 3
lcdLineLen = (len(lcdNumerals) - 1) / lcdWidth
)
func convertToLCD(n int) string {
digits := strconv.Itoa(n)
displayLineLen := len(digits)*lcdWidth + 1
display := make([]byte, displayLineLen*lcdHeight)
for i, digit := range digits {
iPos := i * lcdWidth
digitPos := int(digit-'0') * lcdWidth
for line := 0; line < lcdHeight; line++ {
numeralPos := 1 + lcdLineLen*line + digitPos
numeralLine := lcdNumerals[numeralPos : numeralPos+lcdWidth]
displayPos := displayLineLen*line + iPos
displayLine := display[displayPos : displayPos+lcdWidth]
copy(displayLine, string(numeralLine))
if i == len(digits)-1 {
display[displayLineLen*(line+1)-1] = '\n'
}
}
}
return string(display)
}
func main() {
fmt.Printf("%s\n", convertToLCD(1234567890))
}
Выход:
_ _ _ _ _ _ _ _
| _| _||_||_ |_ ||_||_|| |
||_ _| | _||_| ||_| _||_|