gpt4 book ai didi

dictionary - 如何获取映射的所有键和值并将其作为参数传递给 golang 中的函数?

转载 作者:IT王子 更新时间:2023-10-29 00:53:59 27 4
gpt4 key购买 nike

我遇到过这样的情况:

先得到一张 map ,它的大小未知

例如:myMap map[string]string

然后,我会将映射的所有键和值作为函数的参数

例如 func(key1, key2, ..., value1, value2, ...)

示例函数:https://godoc.org/github.com/garyburd/redigo/redis#Script.Do

如何在 go 中实现这一点?

尽可能高效。

任何帮助将不胜感激:)

最佳答案

我们可以使用内置的 len() 查询 map 的长度功能。所以我们可以创建一个足够大的 slice 来保存所有键和所有值。

之后,只需遍历映射一次就足够了,您可以用键填充 slice 的前半部分,用值填充 slice 的后半部分。

这是尽可能高效的:没有内置 append()被调用,我们只在 map 上迭代一次。

让我们看一个将接收键和值的示例函数。这个只是打印所有这些:

func pairs(keysvalues ...string) {
for _, s := range keysvalues {
fmt.Print(s, ", ")
}
}

以及创建 keysvalues slice 的代码:

m := map[string]string{
"a": "A",
"b": "B",
"c": "C",
}

count := len(m)
all := make([]string, count*2)

i := 0
for k, v := range m {
all[i], all[count+i] = k, v
i++
}

一旦有了 all slice ,就可以像这样调用 pairs() 函数:

pairs(all...)

请注意,虽然 map 上的迭代顺序不是确定性的,但它可能会随着迭代而变化。

示例输出(在 Go Playground 上尝试):

a, b, c, A, B, C, 

注意:

在您的问题中,您指出所有键都在前面,然后是所有值:

func(key1, key2, ..., value1, value2, ...)

在实践中这种情况很少见,而且通常会列出键值对。工作/处理此变体要容易得多:

func pairs(key1, value1, key2, value2, ... keyn, valuen)

如果我们想要生成这个键值对列表,它看起来非常相似:

count := len(m)
all := make([]string, count*2)

i := 0
for k, v := range m {
all[i], all[i+1] = k, v
i += 2
}

关于dictionary - 如何获取映射的所有键和值并将其作为参数传递给 golang 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831908/

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