Я бы, наверное, сделал что-то вроде:
func all(_ values: [Double], in ranges: [Range<Double>]) -> Bool {
zip(values, ranges).allSatisfy { $1 ~= $0 }
}
Таким образом
let values: [Double] = [1,4,3]
let ranges: [Range<Double>] = [
0..<3,
1..<5,
2..<6
]
let result = all(values, in: ranges)
Чтобы не затушевать проблему, но я бы, вероятно, сделал ее обобщенной c , поскольку нет причин, по которым он должен быть ограничен определенным типом или определенным типом диапазона:
func all<T, U: RangeExpression>(_ values: [T], in ranges: [U]) -> Bool where U.Bound == T {
zip(ranges, values).allSatisfy(~=)
}
И, как указала Джесси, если вы включите его, чтобы использовать zip(ranges, values)
, тогда вы можете использовать allSatisfy(~=)
.