2010-10-18 7 views
9

Je voudrais convertir un Array[String] en un Array[Int], en utilisant la méthode de la carte. Quel est le moyen le plus court d'obtenir une fonction de type (String) => Int pour passer en argument de carte?Comment écrire (Chaîne): Fonction Int?

Je préférerais convertir les existants comme Integer.valueOf en quelque sorte. Une méthode de liaison d'argument pour raccourcir la construction comme def parseInt(s:String) = Integer.parseInt(s, 10) serait également grande.

Répondre

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

ou

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

Que signifie "_" de "_.toInt"? – Basilevs

+2

Il s'agit d'un espace réservé, équivalent à Array ("1", "2", "3") map (x => x.toInt), ce qui signifie "pour chaque élément dans le tableau, appliquez la méthode .toInt et construisez un nouveau tableau ", qui se traduira par Array (" 1 ".toInt," 2 ".toInt," 3 ".toInt) –

+0

Ceci est une bonne ressource sur" Placeholder Syntax "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 = false –

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

Tout d'abord, nous allons définir un tableau de chaînes:

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

La façon la plus évidente serait d'utiliser Scala toInt(), disponible sur les chaînes:

Définition:

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

(Note: toString, défini ailleurs, convertit simplement l'objet StringLike à une chaîne Java)

Votre code:

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

Integer.valueOf() fonctionne également, mais remarquez que vous obtiendrez Array[Integer] au lieu de Array[Int]:

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

Pendant que nous y sommes, une pour la compréhension des résultats presque aussi bien, sauf que vous seriez invoquez toInt vous, au lieu de passer sur à map()

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

@huynhjl m'a battu ... – nadavwr

2

Il est aussi simple que:

Array("1", "2", "3") map Integer.valueOf 
Questions connexes