如何在 Swift 3 中为在 for 循环期间修改的数组编写 for 循环?

2024-04-14

所以,我有一个与此类似的 for 循环:

for var i = 0; i < results.count ; i += 1 {
   if (results[i] < 5) {
      results.removeAtIndex(i)
      i -= 1
   }
}

这曾经有效。但是当我将其更改为首选 Swift 3.0 语法时:

for var i in 0..<results.count {
   if (results[i] < 5) {
      results.removeAtIndex(i)
      i -= 1
   }
}

我收到数组 IOOBE 异常,因为它不会重新检查计数并继续直到原始计数results.count.

我该如何解决?现在可以了,但我不想将来遇到麻烦。


虽然解决方案利用filter是一个很好的解决方案,而且更多Swift-ly,还有另一种方法,如果利用for-in尽管如此,仍然希望:

func removeBelow(value: Int) {
    var results = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    for i in (0 ..< results.count).reversed() {
        if (results[i] < value) {
            results.remove(at: i)
        }
    }

    print(results)
}

removeBelow(value: 5)

Result:

[5, 6, 7, 8, 9, 10]

问题在于removeAtIndex循环内的一点是它不会导致数组重新索引自身in-place从而导致数组越界异常count没有被更新。

通过向后遍历,就可以避免越界异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 3 中为在 for 循环期间修改的数组编写 for 循环? 的相关文章

随机推荐

  • Java中创建静态对象的目的是什么?

    class Demo void show System out println i am in show method of super class class Flavor1Demo An anonymous class with Dem
  • 使 GDI 绘图不可点击

    我有一个带有 GDI 绘图的透明 WinForms 应用程序 我将其用作覆盖层 问题是 每当我单击 GDI 绘图时 焦点就会转到应用程序窗口 我该如何扭转这种情况 您需要使用right颜色如TransparencyKey 一切使得Form
  • 如何在 RubyMine 中运行 Cucumber 场景大纲示例表的单行?

    我正在使用 RubyMine 运行测试 强加给我 我有一些使用场景大纲和示例格式的功能 有没有办法可以只运行示例表中的某一行 Example Examples user row row1 row2 1 2 4 51 51 97 98 98
  • Java Swing:将 JLabel 添加到 JPanel

    我只是想将 JLabel 添加到现有的 JPanel 中 这看起来很简单 我已经查遍了 我认为这是正确的 但标签没有出现在我的面板上 有人看到我缺少什么吗 谢谢 ResultsPanel myPanel new ResultsPanel p
  • 如何检查传递到 EC2 实例的用户数据是否正常工作

    在使用 EC2 命令行 API 创建新的 AWS EC2 实例时 我将一些用户数据传递到新实例 我如何知道该用户数据是否被执行 您可以使用以下步骤进行验证 启动 EC2 实例时使用 SSH Check the log of your use
  • CSS - 页面右侧的图像,文本未环绕在其周围

    这可能是一个简单的问题 但我无法弄清楚 我想使用 CSS 将图像放在页面的右侧 而不是在其周围环绕文本 我想要这样的 img text text text text text text text 如果我在图像上进行 float right
  • 为什么 android-inapp-billing-v3 库需要两次尝试购买?

    我正在尝试使用 android inapp billing v3 库在我的简单应用程序中实现应用内购买 我正在使用这个库 https github com anjlab android inapp billing v3 https gith
  • 根据“几个因素”斜率更改 ggplot 中的线条颜色

    更新 我有以下数据 我想根据 3 个因素 I II III 的斜率在组之间画一条线 set seed 205 dat data frame t rep c I II III each 10 pairs rep 1 10 3 value rn
  • 最快的C++序列化?

    我正在寻找一种非常快速的 C 二进制序列化技术 我只需要序列化对象中包含的数据 没有指针等 我希望它尽可能快 如果它特定于 x86 硬件 这是可以接受的 我熟悉执行此操作的 C 方法 作为测试 我对几种技术进行了基准测试 我发现 C 方法比
  • 前往 source.cloud.google.com 获取

    我有一个托管在 source cloud google com 上的项目 我希望使用go get并使用模块来管理它 当我做go get 我得到以下信息 go get source cloud google com
  • 视图隐藏在 UINavigationBar iOS 7 下面

    早些时候 我的项目使用的是 iOS 6 1 最近我已经切换到 iOS 7 对于我知道的很多更改 我更新了我的代码 但是我观察到了一个奇怪的行为 我在每个屏幕上的视图都隐藏在导航栏下方 重新定位视图解决了 iOS7 的问题 但为旧版 iOS
  • App Engine Python:AttributeError:“模块”对象没有属性“Stock”

    我只是在生产中遇到此错误 在本地主机上它运行良好 Traceback most recent call last File base python runtime python lib versions 1 google appengine
  • 在 JS/jQuery 中绑定方向键

    如何在 Javascript 和 或 jQuery 中将函数绑定到左右箭头键 我查看了 jQuery 的 js hotkey 插件 包装内置绑定函数以添加参数来识别特定键 但它似乎不支持箭头键 document onkeydown func
  • Node.js SOAP 客户端参数格式

    我在使用 Node js 的 Node soap 模块作为客户端将某个特定的 Soap 参数正确格式化为第 3 方 SOAP 服务时遇到问题 此方法的 client describe 表示此特定输入应采用以下形式 params param
  • 在 PHPExcel 中复制样式和数据

    我想将某个范围的所有数据和样式复制到其他单元格 例如我想从 A4 I15 复制 然后完全粘贴我想要从 A16 复制的内容和样式 我该怎么做 这就是我要复制的内容 我知道只复制数据而不复制样式 并使用以下代码执行此操作 cellValues
  • 从 Maven 设置 TestNG 的详细级别

    当我运行测试时 我讨厌盯着闪烁的光标而不知道正在运行什么 为了解决这个问题 我在所有测试中添加了完成消息 然而我意识到这是一个非常老套的解决方案并且增加了一些废话 假设TestNG的详细级别打印测试描述 我如何在Maven中设置详细级别 请
  • 查找出现次数最多的单词

    搜索文档中出现次数最多的单词的最佳方法 算法 是什么 查找文档中出现次数最多的单词可以通过简单的 O n 时间复杂度完成直方图 http en wikipedia org wiki Histogram 基于哈希 histogram lt n
  • 正则表达式在特定单词模式处分割字符串

    我正在尝试拆分一个可能如下所示的字符串 International Bank for Reconstruction Development NAICS 928120 SIC 6081 World Bank NAICS 928120 SIC
  • 在接到电话时将应用程序置于最前面

    当我接到电话时 我想将我的应用程序带到电话接听屏幕前面 我在接到电话后完成了所有编码部分 但该应用程序并没有出现在前面 它刚刚打开并停留在电话应答屏幕下方 我想将我的应用程序带到此屏幕前面 我做了如下的事情 Intent i new Int
  • 如何在 Swift 3 中为在 for 循环期间修改的数组编写 for 循环?

    所以 我有一个与此类似的 for 循环 for var i 0 i lt results count i 1 if results i lt 5 results removeAtIndex i i 1 这曾经有效 但是当我将其更改为首选 S