假设我有一个var shortest string
for key, _ := range myMap {
if len(key) < len(shortest) {
shortest = key
}
}
,我希望密钥的长度最短(以字节为单位)。如果我不知道地图中包含的任何特定元素,我该如何获取它的样本以便我能够做到
for
答案 0 :(得分:2)
您可以使用var shortest string
for key, _ := range myMap {
shortest = key
break
}
for key, _ := range myMap {
if len(key) < len(shortest) {
shortest = key
}
}
循环并立即中断它以仅采样一个元素。
{{1}}
丑陋,但确实有效。
答案 1 :(得分:1)
首先应定义两个变量SSIZE_MAX
和shortestLength
,它们将记录到目前为止找到的最短长度,以及相应的密钥。然后开始迭代地图。
这里,诀窍是用一个值初始化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
}
}
将在for循环的第一次迭代中用第一个元素的长度覆盖。并且在循环结束时将包含最短密钥的长度。 shortestLength
将包含密钥本身。