我想将一个键不敏感的字符串作为键。
语言支持它还是我必须自己创建它?
谢谢你
编辑:我正在寻找的是一种默认设置的方法,而不必每次使用 map 时都记得要转换键。
最佳答案
编辑:我的初始代码实际上仍然允许映射语法,因此可以绕过方法。此版本更安全。
您可以“派生”类型。在Go中,我们只说声明。然后,根据类型定义方法。只需一个非常薄的包装即可提供所需的功能。但是请注意,必须使用普通方法调用语法来调用get和set。无法保留内置 map 具有的索引语法或可选的ok结果。
package main
import (
"fmt"
"strings"
)
type ciMap struct {
m map[string]bool
}
func newCiMap() ciMap {
return ciMap{m: make(map[string]bool)}
}
func (m ciMap) set(s string, b bool) {
m.m[strings.ToLower(s)] = b
}
func (m ciMap) get(s string) (b, ok bool) {
b, ok = m.m[strings.ToLower(s)]
return
}
func main() {
m := newCiMap()
m.set("key1", true)
m.set("kEy1", false)
k := "keY1"
b, _ := m.get(k)
fmt.Println(k, "value is", b)
}