2010-10-18 13 views
9

Me gustaría convertir un Array[String] a un Array[Int], utilizando el método del mapa. ¿Cuál es la forma más corta de pasar una función del tipo (String) => Int como argumento del mapa?Cómo escribir (String): ¿Función Int?

Prefiero convertir las existentes como Integer.valueOf de alguna manera. Un método de encuadernación de argumentos para acortar la construcción como def parseInt(s:String) = Integer.parseInt(s, 10) también sería genial.

Respuesta

17
scala> Array("1", "2", "3") map(_.toInt) 
res4: Array[Int] = Array(1, 2, 3) 

o

scala> def parseInt(s:String) = Integer.parseInt(s, 10) 
parseInt: (s: String)Int 

scala> Array("1", "2", "3") map parseInt 
res7: Array[Int] = Array(1, 2, 3) 
+0

¿Qué significa "_" de "_.toInt"? – Basilevs

+2

Es un marcador de posición, equivalente al mapa de matriz ("1", "2", "3") (x => x.toInt), que significa "para cada elemento en el conjunto, aplicar el método .toInt en él y construir una nueva matriz ", que dará como resultado Array (" 1 ".toInt," 2 ".toInt," 3 ".toInt) –

+0

Este es un buen recurso en la" sintaxis de marcador de posición "de Scala: http://books.google. co.uk/books?id=MFjNhTjeQKkC&pg=PA146&lpg=PA146&dq=scala+placeholder+syntax&source=bl&ots=FKtlWGELnw&sig=d_XC9xbr3-4Q8968ZRmzEYamsYY&hl=en&ei=I328TJyaA47KjAf24KnRDg&sa=X&oi=book_result&ct=result&resnum=3&ved=0CCAQ6AEwAg#v=onepage&q=scala%20placeholder% 20syntax & f = falso –

0
scala> val strs = Array("1", "2") 
strs: Array[java.lang.String] = Array(1, 2) 

scala> strs.map(_.toInt) 
res0: Array[Int] = Array(1, 2) 
3

En primer lugar, vamos a definir una matriz de cadenas:

scala> val foo = Array("1", "2", "3") 
foo: Array[java.lang.String] = Array(1, 2, 3) 

La manera más obvia sería utilizar Scala de toInt(), disponible en cadenas:

Definición:

// StringLike.scala 
def toInt: Int   = java.lang.Integer.parseInt(toString) 

(Nota: toString, definida en otro lugar, simplemente convierte el objeto StringLike a una serie Java)

Su código:

scala> foo.map(_.toInt) 
res0: Array[Int] = Array(1, 2, 3) 

Integer.valueOf() también funciona, pero note obtendrá Array[Integer] en lugar de Array[Int]:

scala> foo.map(Integer.valueOf) 
res1: Array[java.lang.Integer] = Array(1, 2, 3) 

Mientras estamos en ello, una para la comprensión iba a funcionar casi tan bien, excepto que estaría invocando toInt ti mismo, en lugar de pasarlo a map()

scala> for (i<-foo) yield i.toInt 
res2: Array[Int] = Array(1, 2, 3) 
+0

@huynhjl me ganó ... – nadavwr

2

Es tan simple como:

Array("1", "2", "3") map Integer.valueOf 
Cuestiones relacionadas