2010-10-18 65 views
9

我想使用映射方法将Array[String]转换为Array[Int]。获得(String) => Int类型函数作为映射参数传递的最短途径是什么?如何写(字符串):Int函数?

我希望以某种方式转换像Integer.valueOf这样的现有内置驱动程序。 一个自变量绑定的方法可以缩短像def parseInt(s:String) = Integer.parseInt(s, 10)这样的构造。

回答

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

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

“_.toInt”中的“_”是什么意思? – Basilevs 2010-10-18 14:32:08

+2

它是一个占位符,相当于Array(“1”,“2”,“3”)map(x => x.toInt),意思是“对于数组中的每个元素,在其上应用.toInt方法,一个新的数组“,这将导致数组(”1“.toInt,”2“.toInt,”3“.toInt) – 2010-10-18 14:35:15

+0

这是一个关于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 – 2010-10-18 17:00:54

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

首先,让我们定义一个字符串数组:

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

最显而易见的方法是使用Scala的toInt(),可在字符串:

定义:

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

(注:toString,其他地方定义,只需将StringLike对象转换为Java字符串)

您的代码:

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

Integer.valueOf()也可以,但是请注意,你会得到Array[Integer]而不是Array[Int]

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

虽然我们在这,一个用于理解会的工作几乎一样好,但你会自己调用toInt,而不是在把它传递给map()

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

@huynhjl击败了我... – nadavwr 2010-10-18 14:43:27

2

很简单:

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