usar página puede gratis google georreferenciación esta ejemplos correctamente como clave cargar map go

página - google maps api key gratis



Obtener una clave/elemento arbitrario de un mapa (3)

Soy nuevo en Golang y ahora quiero obtener un elemento arbitrario de un mapa, ¿cuál es la forma idiomática de hacerlo? Sólo puedo pensar en algo como a continuación:

func get_some_key(m map[int]int) int { for k := range m { return k } return 0 }

La razón por la que quiero eso es que estoy usando un mapa para mantener un conjunto de trabajos y con un mapa puedo obtener un trabajo pendiente o eliminar un trabajo terminado en O (1). Supongo que esto debería ser un requisito común, pero no es obvio hacerlo en marcha.

¡Gracias por adelantado!


Aquí hay una versión más genérica, aunque puede ser menos eficiente:

keys := reflect.ValueOf(mapI).MapKeys() return keys[rand.Intn(len(keys))].Interface()

https://play.golang.org/p/0uvpJ0diG4e


Obtener una clave aleatoria de un mapa solo implica un segundo contador como un número aleatorio.

// choices = map[string]... i := rand.Intn(len(choices)) var k string for k = range choices { if i == 0 { break } i-- } fmt.Println(k, choices[k])

El mapa puede tener cualquier tipo de clave válida y solo necesita cambiar la var k string para que coincida. Puedes empaquetar esto como una función:

func randIntMapKey(m map[int]string) int { i := rand.Intn(len(m)) for k := range m { if i == 0 { return k } i-- } panic("never") }


Se puede discutir si obtener una clave arbitraria de una tabla hash es un requisito común. La implementación de otros mapas de idiomas a menudo carece de esta función (por ejemplo, Diccionario en C # )

Sin embargo, su solución es probablemente la más rápida, pero se quedará con un algoritmo pseudoaleatorio que no controla. Y mientras que la implementación actual utiliza un algoritmo pseduo-aleatorio, la especificación Go no le da ninguna seguridad de que en realidad será aleatoria, solo que no se garantiza que sea predecible:

El orden de iteración sobre los mapas no se especifica y no se garantiza que sea el mismo de una iteración a la siguiente.

Si desea más control de la aleatorización, también puede mantener en paralelo una porción actualizada de valores (o claves) contenida en el mapa, utilizando la aleatorización de su elección ( math/rand o crypto/rand para casos más extremos) para obtener el valor almacenado en un índice, seleccionado aleatoriamente, en el segmento.