2015-06-06 28 views
5

Tôi đã tự hỏi làm thế nào người ta sẽ đi về so sánh 2 mảng boolean và liệt kê các booleans không phù hợp.So sánh 2 mảng và liệt kê sự khác biệt - Swift

Tôi đã viết một ví dụ đơn giản gồm 2 mảng.

let array1 = [true, false, true, false] 
let array2 = [true, true, true, true] 

Làm cách nào để so sánh mảng1 & array2 và hiển thị không khớp. Tôi đang cố gắng thực hiện việc này để kiểm tra kết quả của người dùng cho trò chơi bài kiểm tra.

Cảm ơn!

+0

Bạn thực sự không có ý tưởng? – dasdom

+0

Vấn đề là không rõ bạn nghĩ câu trả lời là gì. Bạn muốn/mong đợi kết quả nào cho đầu vào cụ thể này? Bạn có muốn danh sách chỉ mục không? Một mảng? Gì? Và câu trả lời là gì nếu một người có nhiều phép toán hơn người kia? Nếu một trống? – matt

+0

Và mảng đó trông như thế nào? Bạn phải _specify_! "Câu trả lời đúng" trong đầu bạn là gì? – matt

Trả lời

24

Dưới đây là một thực hiện, nhưng cho dù đó là một trong những bạn đang theo đuổi là hoàn toàn không thể nói, bởi vì bạn chưa xác định những gì bạn nghĩ câu trả lời nên là:

let answer = zip(array1, array2).map {$0.0 == $0.1} 

Cung cấp cho bạn một danh sách các giá trị Bool, true nếu câu trả lời khớp với câu trả lời đúng, false nếu không.

Nhưng hãy nói điều bạn muốn là danh sách các chỉ mục của những câu trả lời đó là chính xác. Sau đó, bạn có thể nói:

let answer = zip(array1, array2).enumerated().filter() { 
    $1.0 == $1.1 
}.map{$0.0} 

Nếu bạn muốn có một danh sách các chỉ số trong những câu trả lời mà là không đúng, chỉ cần thay đổi ==-!=.

+0

Đã thêm một triển khai khác mà chúng tôi giả định những gì bạn muốn là danh sách _indexes_ của các câu trả lời đúng hoặc sai. – matt

+0

Đánh giá cao nó! Cảm ơn nhiều. – simlimsd3

+6

Điều tuyệt vời là câu trả lời này liên quan đến 'map',' filter', 'zip', và' enumerate' tất cả cùng nhau - những điều quan trọng bạn cần phải biết để làm việc với các mảng trong Swift (chỉ 'giảm' bị bỏ qua - không thể tìm thấy cách sử dụng cho nó trong câu hỏi này). :) – matt

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