我想使用映射方法将Array[String]
转换为Array[Int]
。获得(String) => Int
类型函数作为映射参数传递的最短途径是什么?如何写(字符串):Int函数?
我希望以某种方式转换像Integer.valueOf
这样的现有内置驱动程序。 一个自变量绑定的方法可以缩短像def parseInt(s:String) = Integer.parseInt(s, 10)
这样的构造。
我想使用映射方法将Array[String]
转换为Array[Int]
。获得(String) => Int
类型函数作为映射参数传递的最短途径是什么?如何写(字符串):Int函数?
我希望以某种方式转换像Integer.valueOf
这样的现有内置驱动程序。 一个自变量绑定的方法可以缩短像def parseInt(s:String) = Integer.parseInt(s, 10)
这样的构造。
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)
scala> val strs = Array("1", "2")
strs: Array[java.lang.String] = Array(1, 2)
scala> strs.map(_.toInt)
res0: Array[Int] = Array(1, 2)
首先,让我们定义一个字符串数组:
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)
@huynhjl击败了我... – nadavwr 2010-10-18 14:43:27
很简单:
Array("1", "2", "3") map Integer.valueOf
“_.toInt”中的“_”是什么意思? – Basilevs 2010-10-18 14:32:08
它是一个占位符,相当于Array(“1”,“2”,“3”)map(x => x.toInt),意思是“对于数组中的每个元素,在其上应用.toInt方法,一个新的数组“,这将导致数组(”1“.toInt,”2“.toInt,”3“.toInt) – 2010-10-18 14:35:15
这是一个关于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