2013-05-27 49 views
16

Có cách nào đơn giản để trích xuất các giá trị của một danh sách thành một tuple trong Scala không?Trích xuất các giá trị từ Array vào Tuple

Về cơ bản giống như

"15,8".split(",").map(_.toInt).mkTuple //(15, 8) 

Hoặc một số cách khác tôi có thể làm

val (x, y) = "15,8".split(",").map(_.toInt) 

Trả lời

34

Nếu bạn có chúng trong một mảng, bạn có thể viết Array trước tên biến như sau:

val Array(x, y) = "15,8".split(",").map(_.toInt) 

Chỉ cần thay thế bằng Seq hoặc tương tự nếu bạn có loại bộ sưu tập khác.

Về cơ bản, nó hoạt động giống như extractor phía sau hậu trường. Ngoài ra, hãy xem chủ đề liên quan này: scala zip list to tuple

+0

Có cách nào để tạo kết quả 'tuple' trực tiếp mà không tạo hai vals' x' và 'y'? (Tôi thực sự thích các giải pháp nội tuyến) – icl7126

6

Bạn có thể thử kiểu kết hợp:

val (x, y) = "15,8".split(",") match { 
    case Array(x: String, y: String) => (x.toInt, y.toInt) 
    case _ => (0, 0) // default 
} 
+0

Tôi thực sự hy vọng về điều gì đó ít tiết hơn, đơn giản hơn là làm theo cách hiện tại của tôi là var s = l.split (","). (_.toInt) val (x, n) = (s (0), s (1)) Tôi chỉ hy vọng thoát khỏi bước trung gian với 's' – UberMouse

+0

Với mẫu phù hợp, bạn có thể dễ dàng trả về dự phòng giá trị nếu bạn không nhận được hai chuỗi từ phân chia và nó không giới thiệu vals không cần thiết. – rocky3000

+1

Chỉ để ghi lại: phần 'case _ => (0, 0)' thực sự gợi ý điều mà người hỏi ban đầu không hỏi gì cả. –

Các vấn đề liên quan