forEach
только повторяет данную последовательность, вы не можете возвращать значения из forEach
замыкания.contains
лучше подходит для таких задач:
func pairs(_ input: [Int], _ sum: Int ) -> Bool {
return input.contains { number in
let secondInput = input.filter { $0 != number }
return secondInput.contains { secondNumber in
return secondNumber + number == sum
}
}
}
Вы также можете попробовать более функциональное решение, которое разбивает проблему на несколько этапов:
func pairs(_ input: [Int], _ sum: Int ) -> Bool {
return input
.flatMap { input1 in input.map { input2 in (input1, input2) } } // build all combinations of numbers from the input array
.contains { input1, input2 in input1 != input2 && input1 + input2 == sum } // check if a pair made of two distinct numbers adds up to the sum
}
Если вам нужнорешение, которое обрабатывает любые виды ввода (например, только уникальные числа), тогда функциональное решение может быть адаптировано к этому:
func pairs(_ input: [Int], _ sum: Int ) -> Bool {
return input.indices
.flatMap { i1 in input.indices.map { i2 in (i1, i2) } }
.contains { i1, i2 in i1 != i2 && input[i1] + input[i2] == sum }
}