Cómo convertir un conjunto ("a", "b", "c") a un mapa ("a" -> 1, "b" -> 2, "c" -> 3)? Creo que debería funcionar con toMap.Scala Convert Establecer como mapa
Respuesta
zipWithIndex
es probablemente lo que está buscando. Tomará su colección de letras y creará una nueva colección de Tuplas, haciendo coincidir el valor con la posición en la colección. Usted tiene un requisito adicional de que - se ve como sus posiciones comienzan con 1, en lugar de 0, por lo que necesita para transformar esas tuplas:
Set("a","b","c")
.zipWithIndex //(a,0), (b,1), (c,2)
.map{case(v,i) => (v, i+1)} //increment each of those indexes
.toMap //toMap does work for a collection of Tuples
Una consideración adicional - Conjuntos no conservan su posición. Considere usar una estructura como Lista si desea que la posición anterior funcione de manera consistente.
Eso es lo que quería. Gracias. –
toMap solo funciona si el conjunto es pares de clave/valor (por ejemplo, Set (("a", 1), ("b", 2) ("c", 3)). Para obtener lo que desea, utilice zipWithIndex:
scala> Set("a","b","c") zipWithIndex
res5: scala.collection.immutable.Set[(java.lang.String, Int)] = Set((a,0), (b,1), (c,2))
EDIT: o (como en el que pregunta original :))
scala> Set("a","b","c") zip (1 to 3) toMap
Edit2: Duh, se me olvidó el tomap al final!
Aquí hay otra solución que utiliza un Stream
de todos los números naturales a partir del 1 al ser comprimido con su Set
:
scala> Set("a", "b", "c") zip Stream.from(1) toMap
Map((a,1), (b,2), (c,3))
+1, esta es la mejor respuesta aquí. – missingfaktor
Esto también funcionaría:
(('a' to 'c') zip (1 to 3)).toMap
- 1. Scala: Convert org.w3c.dom.Document a scala.xml.NodeSeq
- 2. convert Mapa valores en Array cadena
- 3. idiomático Scala Mapa upsert
- 4. ¿Por qué (copiar) agregar a Seq en Scala se define como: + y no solo como en Establecer y Mapa?
- 5. Scala Mapa conversión
- 6. mapa Scala de clasificación
- 7. Scala Mapa foreach
- 8. tipo de clase como clave en el mapa de Scala
- 9. Scala foreach y mapa inicializadores
- 10. Scala Mapa de tupla iterables
- 11. Scala - Captura de una excepción dentro de un mapa
- 12. scala mejor sintaxis para el mapa getOrElse
- 13. Scala no coincide con el mapeo Mapa
- 14. Mostrar mapa como OpenStreetMap
- 15. El mapa Scala Array devuelve ArraySeq
- 16. PHP Convert Array Keys
- 17. Cómo imprimir un mapa en Scala
- 18. Sintaxis del método de mapa de Scala
- 19. Cómo crear un mapa ordenado en scala?
- 20. Scala iterador con el mapa y para
- 21. Convert Array para JSON
- 22. .Net Parse versus Convert
- 23. Tratando un constructor como una función en Scala: ¿cómo poner constructores en un mapa?
- 24. Convertir Scala Establecer en Java (java.util.Set)?
- 25. Diseñando un conveniente mapa valorado por defecto en Scala
- 26. Java Convert MouseEvent to ActionEvent
- 27. MySQL MSSQL equivalente de CONVERT()
- 28. convert std: vector to NSArray
- 29. jQuery - convert .live() a .on()
- 30. C# convert system.IO.Stream to Byte []
¿Quieres b para mapear a 2 porque es el segundo en el Set? ¿O porque es la segunda letra del alfabeto? Los conjuntos no están ordenados, como han señalado otros carteles, por lo que el primero no funcionará. –