2010-10-18 1 views
9

Tôi muốn chuyển đổi một số Array[String] thành Array[Int], bằng cách sử dụng phương thức bản đồ. Cách ngắn nhất để có được một chức năng của loại (String) => Int để vượt qua như đối số bản đồ là gì?Cách viết (Chuỗi): Hàm Int?

Tôi muốn chuyển đổi nội dung dựng sẵn hiện có như Integer.valueOf theo một cách nào đó. Một phương pháp liên kết đối số để rút ngắn việc xây dựng như def parseInt(s:String) = Integer.parseInt(s, 10) cũng sẽ tuyệt vời.

Trả lời

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

hoặc

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

"_" từ "_.toInt" có nghĩa là gì? – Basilevs

+2

Nó là một giữ chỗ, tương đương với bản đồ ("1", "2", "3") (x => x.toInt), có nghĩa là "cho mỗi phần tử trong mảng, áp dụng phương thức .toInt trên nó và xây dựng một mảng mới ", sẽ dẫn đến mảng" ("1" .toInt, "2" .toInt, "3" .toInt) –

+0

Đây là một tài nguyên tốt trên "Cú pháp giữ chỗ" của 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

Trước tiên, hãy xác định một mảng của chuỗi:

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

Cách rõ ràng nhất sẽ được sử dụng Scala của toInt(), có sẵn trên dây:

Định nghĩa:

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

(Lưu ý: toString, được xác định ở nơi khác, chỉ đơn giản là chuyển đổi đối tượng StringLike thành một chuỗi Java)

Mã của bạn:

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

Integer.valueOf() cũng làm việc, nhưng chú ý bạn sẽ nhận được Array[Integer] thay vì Array[Int]:

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

Trong khi chúng tôi đang ở đó, một cho sự hiểu biết sẽ làm việc gần như là tốt, ngoại trừ bạn muốn được gọi toInt chính mình, thay vì đi qua nó trên để map()

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

@huynhjl đánh tôi với nó ... – nadavwr

2

Nó đơn giản như:

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