Có cách nào để thao tác nhiều giá trị của bộ tuple mà không sử dụng biến tạm thời và bắt đầu một câu lệnh mới không?Thao tuples
Giả sử tôi có phương thức trả về một bộ tuple và tôi muốn làm điều gì đó với các giá trị đó nội dòng.
ví dụ: nếu tôi muốn tách một chuỗi tại một điểm nhất định và đảo ngược các mảnh
def backToFront(s: String, n:Int) = s.splitAt(n)...
tôi có thể làm
val (a, b) = s.splitAt(n)
b + a
(đòi hỏi các biến tạm thời và tuyên bố mới) hoặc
List(s.splitAt(n)).map(i => i._2 + i._1).head
(công trình , nhưng có vẻ hơi bẩn, tạo một phần tử duy nhất Danh sách chỉ dành cho việc này) hoặc
s.splitAt(n).swap.productIterator.mkString
(hoạt động cho ví dụ cụ thể này, nhưng chỉ vì có một phương pháp swap
làm những gì tôi muốn, vì vậy nó không phải là rất chung chung).
Phương thức zipped
trên bộ dữ liệu dường như chỉ dành cho bộ danh sách.
Ví dụ khác, làm cách nào bạn có thể biến tuple ('a, 'b, 'c)
thành ('b, 'a, 'c)
trong một tuyên bố?
Kết hợp mẫu phù hợp! 's.splitAt (n) khớp với {case (a, b) => b + a}' hoạt động cho phần đầu tiên –
Thật đáng tiếc là không có phương thức 'fold' trong thư viện chuẩn; thì bạn có thể chỉ 's.splitAt (n) .fold ((a, b) => b + a)', và nó cũng hiệu quả hơn. (Vâng, tất nhiên tôi đã tự làm.) –
Fold là tên tốt cho nó. Tôi đã cập nhật câu trả lời của mình. –