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

假设我有一个map[string]int, 并且我想要长度最短(以字节为单位)的密钥。如果我不知道地图包含的任何特定元素,我如何获取它的样本以便我可以做


var shortest string

for key, _ := range myMap {

    if len(key) < len(shortest) {

        shortest = key

    }

}


德玛西亚99
浏览 196回答 3
3回答

千巷猫影

您可以使用for循环并立即跳出循环以仅对一个元素进行采样。var shortest stringfor key, _ := range myMap {&nbsp; &nbsp; shortest = key&nbsp; &nbsp; break}for key, _ := range myMap {&nbsp; &nbsp; if len(key) < len(shortest) {&nbsp; &nbsp; &nbsp; &nbsp; shortest = key&nbsp; &nbsp; }}丑陋,但它的工作原理。

互换的青春

您应该首先定义两个变量shortestLengthand shortest,它们将分别记录您找到的最短长度和对应的键。然后开始遍历地图。在这里,诀窍是shortestLength用一个值初始化变量,该值将在第一次通过时被覆盖。好处是,您不必编写任何额外的代码并分配额外的内存来对键进行排序,并找到最短的键。完整代码如下:if len(myMap) == 0 {&nbsp; &nbsp;// Empty map}// Will be over-written in first iterationshortestLength := maths.MaxInt32shortest := ""for key, _ := range myMap {&nbsp; keyLength := len(key)&nbsp; if keyLength <= shortestLength {&nbsp; &nbsp; shortest = key&nbsp; &nbsp; shortestLength = keyLength&nbsp; }}shortestLength在我们的 for 循环的第一次迭代中,该变量将被第一个元素的长度覆盖。并且在循环的末尾将包含最短密钥的长度。并且shortest将包含密钥本身。

炎炎设计

您可以遍历地图,将元素添加到切片中。然后对切片进行排序:var keys []stringfor k := range myMap {&nbsp; &nbsp; keys = append(keys, k)}sort.Strings(keys) // keys[0] is the shortedGoPlay:http ://play.golang.org/p/DULIiQAkfg
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go