Giả sử chúng ta có các danh mục sau kích thước khác nhau:Zip hai danh sách có độ dài khác nhau với yếu tố mặc định để điền
val list1 = ("a", "b", "c")
val list2 = ("x", "y")
Bây giờ tôi muốn kết hợp 2 liệt kê những điều này và tạo ra một danh sách mới với các yếu tố chuỗi được nối :
val desiredResult = ("ax", "by", "c")
tôi đã cố gắng
val wrongResult = (list1, list2).zipped map (_ + _)
như đề xuất here, nhưng điều này không hoạt động như dự định, vì zip loại bỏ các thành phần đó trong danh sách dài hơn không thể khớp được.
Làm cách nào để giải quyết vấn đề này? Có cách nào để zip danh sách và đưa ra một "yếu tố mặc định" (như chuỗi rỗng trong trường hợp này) nếu một danh sách dài hơn?
Tôi đoán luôn có điều gì đó mà bạn không biết. –
Cảm ơn! Bây giờ nó làm việc với giải pháp này: 'list1.zipAll (list2," "," ") map ({case (y, x) => y + x})' nhưng không giống như trước với 'list1.zipAll (list2," "," ") bản đồ (_ + _)'. Tại sao tôi không thể sử dụng cú pháp ngắn với zipAll như chức năng nén? – ForceOfWill
@ForceOfWill: '(list1, list2) .zipped' trả về' Tuple2Zipped', trong đó ['.map'] (http://www.scala-lang.org/api/current/index.html#scala.runtime .Tuple2Zipped @ map [B, To] (f: (El1, El2) => B) (implicitcbf: scala.collection.generic.CanBuildFrom [Repr1, B, To]): Tới) lấy một 'f: (El1, El2) => B' (tức là một hàm lấy 2 đối số). '' '' '' Của 'List [a]' có một 'f: A => B', nghĩa là chỉ có 1 đối số (trong trường hợp này là' Tuple2'). Thật không may điều này có nghĩa là '_ + _' (là một hàm nhận 2 đối số) không thể được áp dụng ở đây. – Marth