2015-06-06 36 views
5

Zastanawiam się, w jaki sposób można by porównywać 2 tablice typu boolean i wymieniać niezgodne wartości logiczne.Porównaj 2 tablice i wymień różnice - Swift

Napisałem prosty przykład 2 tablic.

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

Jak bym porównać array1 & tablica2 i wyświetlić non dopasowanie. Próbuję to zrobić, aby sprawdzić wyniki użytkowników w grze quizowej.

Dzięki!

+0

Naprawdę nie masz pojęcia? – dasdom

+0

Problem polega na tym, że nie jest jasne, co myślisz, że odpowiedź jest. Jaki wynik chcesz/oczekujesz dla tego konkretnego wejścia? Czy chcesz listę indeksów? Tablica? Co? A jaka powinna być odpowiedź, jeśli ma się więcej booleanów niż innych? Jeśli ktoś jest pusty? – matt

+0

Jak powinna wyglądać ta tablica? Musisz _specify_! Jaka jest "właściwa odpowiedź" w twoim umyśle? – matt

Odpowiedz

24

Oto jeden wdrożenie, ale czy jest to jeden jesteś po to całkowicie niemożliwe, aby powiedzieć, ponieważ nie określono, co myślisz odpowiedź powinny być:

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

który daje lista wartości Bool, true, jeśli odpowiedź pasuje do prawidłowej odpowiedzi, jeśli nie, false.

Ale powiedzmy, że potrzebna jest lista tych odpowiedzi, które są poprawne. Wtedy można powiedzieć:

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

Jeśli chcesz listę indeksów tych odpowiedzi, które są nie poprawne, wystarczy zmienić == do !=.

+0

Dodano kolejną implementację, w której zakładamy, że chcesz uzyskać listę _indeksów_ prawidłowych lub błędnych odpowiedzi. – matt

+0

Doceniam to! Dziękuję Ci bardzo. – simlimsd3

+6

Naprawdę wspaniałą rzeczą jest to, że tej odpowiedzi udało się połączyć w jedną całość: 'map',' filter', 'zip' i' enumerate' - kluczowe rzeczy, o których musisz wiedzieć, aby pracować z tablicami w Swift (tylko 'reduce' został pominięty - nie mógł znaleźć dla niego zastosowania w tym pytaniu). :) – matt