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
}
}
丑陋,但它的工作原理。

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将包含密钥本身。

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
- 3 回答
- 0 关注
- 195 浏览
添加回答
举报