Swift:删除数组中不含originals子串元素失败,求Java式循环实现
问题原因及解决方法
你的代码没生效是因为正向遍历数组时删除元素会导致索引移位:当你删除某个位置的元素后,后面的所有元素都会向前移动一位,而循环的position还在递增,这就会跳过原本应该检查的元素,导致很多该删的项没被处理。
要实现类似Java的for i循环逻辑,你需要从数组末尾开始反向遍历,这样删除元素不会影响前面未检查的元素索引:
// 示例数组 var imageURLs = ["pic-originals.png", "photo.jpg", "art-originals.jpeg", "drawing.gif"] // 反向遍历数组索引 for i in stride(from: imageURLs.count - 1, through: 0, by: -1) { if !imageURLs[i].contains("originals") { imageURLs.remove(at: i) } } print(imageURLs) // 输出 ["pic-originals.png", "art-originals.jpeg"]
为什么反向遍历可行?
从数组最后一位开始往前检查,删除当前元素后,前面的元素索引不会发生变化,每一个元素都能被正确检查到,不会出现跳过的情况。
内容的提问来源于stack exchange,提问作者Ohefoof
相关产品推荐
相关产品推荐

