为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中获取地图的任何给定元素?

如何在 Go 中获取地图的任何给定元素?

Go
德玛西亚99 2022-01-04 13:34:02
假设我有一个map[string]int, 并且我想要长度最短(以字节为单位)的密钥。如果我不知道地图包含的任何特定元素,我如何获取它的样本以便我可以做var shortest stringfor key, _ := range myMap {    if len(key) < len(shortest) {        shortest = key    }}
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

您可以使用for循环并立即跳出循环以仅对一个元素进行采样。


var shortest string

for key, _ := range myMap {

    shortest = key

    break

}

for key, _ := range myMap {

    if len(key) < len(shortest) {

        shortest = key

    }

}

丑陋,但它的工作原理。


查看完整回答
反对 回复 2022-01-04
?
互换的青春

TA贡献1797条经验 获得超6个赞

您应该首先定义两个变量shortestLengthand shortest,它们将分别记录您找到的最短长度和对应的键。然后开始遍历地图。


在这里,诀窍是shortestLength用一个值初始化变量,该值将在第一次通过时被覆盖。好处是,您不必编写任何额外的代码并分配额外的内存来对键进行排序,并找到最短的键。


完整代码如下:


if len(myMap) == 0 {

   // Empty map

}


// Will be over-written in first iteration

shortestLength := maths.MaxInt32

shortest := ""


for key, _ := range myMap {

  keyLength := len(key)

  if keyLength <= shortestLength {

    shortest = key

    shortestLength = keyLength

  }

}

shortestLength在我们的 for 循环的第一次迭代中,该变量将被第一个元素的长度覆盖。并且在循环的末尾将包含最短密钥的长度。并且shortest将包含密钥本身。


查看完整回答
反对 回复 2022-01-04
?
炎炎设计

TA贡献1808条经验 获得超4个赞

您可以遍历地图,将元素添加到切片中。然后对切片进行排序:


var keys []string

for k := range myMap {

    keys = append(keys, k)

}

sort.Strings(keys) // keys[0] is the shorted

GoPlay:http ://play.golang.org/p/DULIiQAkfg


查看完整回答
反对 回复 2022-01-04
  • 3 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号