一尘不染

Golang数字的字母表示形式

go

有没有简单的方法可以将数字转换为字母?

例如,
3=> "C"23=> "W"


阅读 892

收藏
2020-07-02

共1个答案

一尘不染

为简单起见,以下解决方案中省略了范围检查。
它们都可以在Go Playground上尝试。

号码-> rune

只需将数字'A' - 1添加1到const即可,然后将其添加到const中'A',然后添加2get 'B'等。

func toChar(i int) rune {
    return rune('A' - 1 + i)
}

测试它:

for _, i := range []int{1, 2, 23, 26} {
    fmt.Printf("%d %q\n", i, toChar(i))
}

输出:

1 'A'
2 'B'
23 'W'
26 'Z'

号码-> string

或者,如果您希望将其作为string

func toCharStr(i int) string {
    return string('A' - 1 + i)
}

输出:

1 "A"
2 "B"
23 "W"
26 "Z"

string规范中记录了最后一个(将数字转换为):在字符串类型之间来回转换

将有符号或无符号整数值转换为字符串类型会产生一个包含该整数的UTF-8表示形式的字符串。

编号-> string(已缓存)

如果您需要多次执行此操作strings,例如将其存储在一个数组中,然后string从中返回即可,这是有利可图的:

var arr = [...]string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
    "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}

func toCharStrArr(i int) string {
    return arr[i-1]
}

注意:切片(而不是数组)也可以。

注2:你可以,如果你添加一个虚拟的第一个字符,所以你不必减去改善这个1来自i

var arr = [...]string{".", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
    "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}

func toCharStrArr(i int) string { return arr[i] }

数字-> string(切片string常量)

另一个有趣的解决方案:

const abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

func toCharStrConst(i int) string {
    return abc[i-1 : i]
}

切片a string是有效的:新方法string将共享后备数组(可以完成,因为strings是不可变的)。

2020-07-02