当前位置: 首页 > 知识库问答 >
问题:

从地图中获取密钥切片

谷梁子濯
2023-03-14

在Go中,有没有更简单/更好的方法从地图中获取一部分密钥?

目前,我正在遍历地图并将关键点复制到一个切片:

i := 0
keys := make([]int, len(mymap))
for k := range mymap {
    keys[i] = k
    i++
}

共有3个答案

佴普松
2023-03-14

您也可以通过包“reflect”中struct Value的方法< code>MapKeys获取类型为< code>[]Value的键数组:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    abc := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }

    keys := reflect.ValueOf(abc).MapKeys()

    fmt.Println(keys) // [a b c]
}
祁聪
2023-03-14

举个例子,

package main

func main() {
    mymap := make(map[int]string)
    keys := make([]int, 0, len(mymap))
    for k := range mymap {
        keys = append(keys, k)
    }
}

为了提高Go的效率,最小化内存分配很重要。

郑景胜
2023-03-14

这是一个老问题,但这是我的两分钱。PeterSO的回答略为简洁,但效率略低。你已经知道它会有多大,所以你甚至不需要使用append:

keys := make([]int, len(mymap))

i := 0
for k := range mymap {
    keys[i] = k
    i++
}

在大多数情况下,这可能不会有太大的区别,但这并不会增加太多工作,在我的测试中(使用一个包含1,000,000个随机< code>int64键的映射,然后用每种方法生成十次键数组),直接分配数组成员比使用append快20%左右。

尽管设置容量消除了重新分配,但追加仍然需要做额外的工作来检查您是否已达到每个追加的容量。

 类似资料:
  • 问题内容: 我尝试从KeyStore获取密钥。我通过Keytool创建了一个密钥库: keytool -genkeypair -dname“ cn = Mark Jones,ou = JavaSoft,o = Sun,c = US” -alias business2 -keypass abcdtest -keystore C:\ workspace \ XMLSample \ keystore \

  • 问题内容: 我在Java中有一个Hashmap,如下所示: 然后我像这样填充它: 如何获得钥匙?类似于:返回“ United”。 问题答案: 一个包含多个键。您可以用来获取所有键的集合。 将存储与key 和key 。要遍历所有键: 将打印和。

  • 问题内容: 在Go中,有没有更简单/更巧妙的方法从地图中获取键的片段? 目前,我正在遍历地图并将键复制到一个切片: 问题答案: 例如, 为了在Go中高效运行,最小化内存分配非常重要。

  • 我创建了一个CloudFormation模板,它成功地创建了一个IAM用户和一个AccessKey,并将该AccessKey分配给IAM用户。现在,我通过在CloudFormation模板的部分中输出AccessKey来获得AccessKey的秘密。

  • 在,调用合并函数。 问题:如何获取导致复制的密钥? 在合并函数中,我想根据键来决定是否取消映射,或者继续并接受这些值。

  • 我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎和作为可执行JAR文件的包。 在我的财产档案中: 在我的控制器中: 在模板中: 但这是我在模板中看到的,而不是电子邮件(已拍摄)