Avatar
うーん… extension Array { mutating func updateOrRemove(_ f: (inout Element, _ remove: inout Bool) -> Void) { var writeIdx = startIndex for readIdx in indices { var remove = false f(&self[readIdx], &remove) if writeIdx != readIdx { self[writeIdx] = self[readIdx] } if !remove { formIndex(after: &writeIdx) } } removeLast(distance(from: writeIdx, to: endIndex)) } } var ary = [1,2,3,4] ary.updateOrRemove { (elem, remove) in if elem % 3 == 0 { remove = true return } elem *= 10 } print(ary)