英文:
How do I get any given element of a map in Go?
问题
假设我有一个 map[string]int
,我想要找到长度(以字节为单位)最短的键。如果我不知道地图中包含的任何特定元素,我该如何获取一个样本,以便我可以执行以下操作:
var shortest string
for key, _ := range myMap {
if len(key) < len(shortest) {
shortest = key
}
}
英文:
Suppose I have a map[string]int
, and I want the key with the shortest length (in bytes). If I don't know any particular element that the map contains, how do I get a sample of it so I can do
var shortest string
for key, _ := range myMap {
if len(key) < len(shortest) {
shortest = key
}
}
答案1
得分: 2
你可以使用for
循环,并立即跳出循环来仅采样一个元素。
var shortest string
for key, _ := range myMap {
shortest = key
break
}
for key, _ := range myMap {
if len(key) < len(shortest) {
shortest = key
}
}
虽然不太美观,但它可以工作。
英文:
You can use a for
loop and break out of it immediately to sample just one element.
var shortest string
for key, _ := range myMap {
shortest = key
break
}
for key, _ := range myMap {
if len(key) < len(shortest) {
shortest = key
}
}
Ugly, but it works.
答案2
得分: 1
你应该首先定义两个变量shortestLength
和shortest
,它们将分别记录到目前为止找到的最短长度和对应的键。然后开始遍历地图。
在这里,技巧是用一个值初始化shortestLength
变量,这个值将在第一次遍历中被覆盖。好处是你不需要编写任何额外的代码和分配额外的内存来对键进行排序和找到最短的键。
完整的代码如下:
if len(myMap) == 0 {
// 空地图
}
// 将在第一次迭代中被覆盖
shortestLength := maths.MaxInt32
shortest := ""
for key, _ := range myMap {
keyLength := len(key)
if keyLength <= shortestLength {
shortest = key
shortestLength = keyLength
}
}
变量shortestLength
将在第一次迭代中被最短键的长度覆盖。在循环结束时,它将包含最短键的长度。而shortest
将包含键本身。
英文:
You should first define two variables shortestLength
and shortest
, they will record shortest length you found until now, and corresponding key, respectively. And then start iterating over the map.
Here, the trick is to initialise shortestLength
variable with a value, which will be over-written in the first pass. The benefit is that, you don't have to write any extra code and allocate extra memory to sort the keys, and find the shortest one.
Complete code is as following:
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
}
}
The variable shortestLength
will be over-written with the length of first element in the first iteration of our for loop. And at the end of the loop will contain the length of shortest key. And shortest
will contain the key itself.
答案3
得分: 0
你可以遍历这个映射,将元素添加到一个切片中。然后对切片进行排序:
var keys []string
for k := range myMap {
keys = append(keys, k)
}
sort.Strings(keys) // keys[0] 是最短的
GoPlay: http://play.golang.org/p/DULIiQAkfg
英文:
You could iterate over the map, adding the elements to a slice. Then sort the slice:
var keys []string
for k := range myMap {
keys = append(keys, k)
}
sort.Strings(keys) // keys[0] is the shorted
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论