gpt4 book ai didi

dictionary - 测试和处理映射中多个键的惯用 Go 方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:23:31 24 4
gpt4 key购买 nike

我有一个 map[string]string,我需要测试一些键是否存在,如果存在,则将一些值转换为整数。例如:

m := map[string]string{"a": "b", "c": "d", "e": "f"}
if v1, ok := m["a"]; ok {
if v2, ok := m["c"]; ok {
if i1, err := strconv.Atoi(v1); err != nil {
if i2, err := strconv.Atoi(v2); err != nil {
// do something with i1, i2
}
}
}
}

我发现自己的思路是:

if m.exists("a") && m.exists("c") && is_int(m["a"]) && is_int(m["c"]) {
// do something with atoi(m["a"]) and atoi(m["c"])
}

...但这对于 Go 的标准库来说并不方便。那么,Go 的实现方式是什么?

最佳答案

测试 string 值是否为数字并将其转换为数字基本上是相同的工作量。

所以我宁愿使用以下 util 函数,它除了检查键和测试值外还返回转换后的数字:

func getInts(m map[string]string, keys ...string) (is []int, err error) {
for _, k := range keys {
v, ok := m[k]
if !ok {
return is, fmt.Errorf("%s is missing", k)
}
var i int
if i, err = strconv.Atoi(v); err != nil {
return
}
is = append(is, i)
}
return
}

用 3 种不同的情况对其进行测试:

maps := []map[string]string{
{},
{"a": "b", "c": "d", "e": "f"},
{"a": "1", "c": "2", "e": "f"},
}

for _, m := range maps {
if is, err := getInts(m, "a", "c"); err == nil {
fmt.Println("Numbers:", is)
} else {
fmt.Println("Error:", err)
}
}

输出(在 Go Playground 上尝试):

Error: a is missing
Error: strconv.Atoi: parsing "b": invalid syntax
Numbers: [1 2]

关于dictionary - 测试和处理映射中多个键的惯用 Go 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46533551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com