过滤器比较数组相同的索引 swift 4



我的情况是创建多项选择题,我想比较同一索引中的数组

正确答案:

[3, 2, 0, 2, 2]

用户回答:

[3, 2, 3, 1, 1]

预期输出:

[3,2]

这是代码

let filteredArray = correctAnswer.filter{ userAnswer.contains($0) }
print(filteredArray)

但输出:

[3, 2, 2, 2]

谢谢。

如果要逐个索引比较两个数组索引,则可以将compactMapzip一起使用。

let correctAns = [3, 2, 0, 2, 2]
let userAns = [3, 2, 3, 1, 1]
let finalAns = zip(correctAns, userAns).compactMap({ $0 == $1 ? $0 : nil })
print(finalAns) // [3, 2]

编辑:您甚至可以通过使用@MartinR建议来简化此操作。

let finalAns = zip(correctAns, userAns).filter(==).map { $1 }

如果你想要正确答案的索引,你可以得到这样的。

let finalAnsIndex = zip(correctAns, userAns).enumerated().compactMap({ $0.element.0 == $0.element.1 ? $0.offset : nil })
print(finalAnsIndex) // [0, 1]

您可以zip这两个数组来过滤正确的答案:

zip(userGuesses, correctAnswers).filter { (guess, answer) in guess == answer }

此外,如果您只想要正确的答案,则可以映射压缩序列以仅获取用户答案:

zip(userGuesses, correctAnswers)
.filter { (guess, answer) in guess == answer }
.map { (guess, _) in guess }

也就是说,这并没有说明哪些问题回答正确。例如:如果正确答案[1,2,3,2,1,3]并且用户回答[1,3,1,2,3,3]则不可能知道用户答对了哪些问题(因为#1, #3#1, #6#5, #6都会导致[1,3]

最新更新