如何从反射 MapKeys 中获取字符串数组形式的键?

新手上路,请多包涵

我需要使用 strings.Join(invoicesBatch, ",") 来加入一个字符串数组。

但是我使用 reflect.ValueOf(invoiceList).MapKeys() 从地图上得到的数组是 reflect.Value 数组。有没有一种简单的方法可以将它们转换为字符串数组。

地图是用字符串键初始化的。

原文由 user4142018 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 545
2 个回答

您将需要使用循环,但您不需要每次都创建一个新切片,因为我们已经知道长度。例子:

 func main() {
    a := map[string]int{
        "A": 1, "B": 2,
    }
    keys := reflect.ValueOf(a).MapKeys()
    strkeys := make([]string, len(keys))
    for i := 0; i < len(keys); i++ {
        strkeys[i] = keys[i].String()
    }
    fmt.Print(strings.Join(strkeys, ","))
}

原文由 Ankur 发布,翻译遵循 CC BY-SA 3.0 许可协议

除了使用反射,您还可以使用 for 循环和范围来获取这样的键片段

package main

import (
"fmt"
"strings"
)

func main() {
  data := map[string]int{
      "A": 1,
      "B": 2,
  }
  keys := make([]string, 0, len(data))
  for key := range data {
    keys = append(keys, key)
  }

  fmt.Print(strings.Join(keys, ","))
}

原文由 zola 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题