1 回答
TA贡献1851条经验 获得超5个赞
大多数情况下,我只会编写明显的代码:
func KeysString(m map[string]bool) string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
return "[" + strings.Join(keys, ", ") + "]"
}
如果您需要效率而不是可读性,您可以查看 的实现strings.Join以了解如何编写这种最小化副本。这与您的代码之间的主要区别在于,[]byte构造了长度完全正确的a以防止在缓冲区必须调整大小时复制数据,因为结果正在建立。
func KeysString(m map[string]bool) string {
if len(m) == 0 {
return "[]"
}
n := 2 * len(m) // (len-1) commas (", "), and one each of "[" and "]".
for k := range m {
n += len(k)
}
b := make([]byte, n)
bp := copy(b, "[")
first := true
for k := range m {
if !first {
bp += copy(b[bp:], ", ")
}
bp += copy(b[bp:], k)
first = false
}
bp += copy(b[bp:], "]")
return string(b)
}
当然,请务必在您使用此函数的代码的上下文中进行分析和优化,以确保可读性权衡确实值得。
- 1 回答
- 0 关注
- 168 浏览
添加回答
举报