Итак, первый элемент остается таким, какой он есть, а следующие элементы отображаются.Если отличие элемента от исходного массива с индексом -1 больше 10, элемент «заменяется» на 0
let array = [1,3,2,1,4,3,99,3,5,2,1,45]
var temp = array
let mapped = [temp[0]] + temp.dropFirst().enumerated().map {
let condition = abs(temp[$0.offset] - $0.element) > 10
if condition { temp[$0.offset + 1] = 0 }
return condition ? 0 : $0.element
}
print(mapped) // [1,3,2,1,4,3,0,3,5,2,1,0]
... если вы не хотите считать с замененными элементами, просто удалите настройкуэлементы temp
массива
let array = [1,3,2,1,4,3,99,3,5,2,1,45]
let mapped = [array[0]] + array.dropFirst().enumerated().map {
let condition = abs(array[$0.offset] - $0.element) > 10
return condition ? 0 : $0.element
}
print(mapped) // [1,3,2,1,4,3,0,0,5,2,1,0]
В качестве альтернативы, например, если вы хотите просто изменить текущий массив, вы можете добавить этот метод к расширению Array
из Int
var array = [1,3,2,1,4,3,99,3,5,2,1,45]
extension Array where Element == Int {
mutating func replace(difference: Int) {
guard count > 0 else { return }
self = [self[0]] + self.dropFirst().enumerated().map {
let condition = abs(self[$0.offset] - $0.element) > difference
if condition { self[$0.offset + 1] = 0 }
return condition ? 0 : $0.element
}
}
}
array.replace(difference: 10)
print(array) // [1,3,2,1,4,3,0,3,5,2,1,0]