【问题标题】:Remove a particular value from array instead of remove using index path从数组中删除特定值,而不是使用索引路径删除
【发布时间】:2019-03-11 14:04:18
【问题描述】:

我正在处理数组,应用程序的整体工作是用户可以选择必须添加到特定播放列表的歌曲数量。当用户单击 tableview 单元格时,我使用 Tableview 列出歌曲添加了 .checkmark 当已经找到复选标记时,我将删除 .checkmark,类似地,当用户选择歌曲时,我保留了一个数组来保存该特定歌曲的曲目 ID . “SongIDArray”是用来保存的数组。当用户取消选择歌曲时,我必须删除特定歌曲的“track id”。但在数组中它有 remove(at: index) 我不能通过索引删除它。请帮帮我

例如:**我的数组是**

songIDArray = [25,45,69,78,63]

我需要在不知道索引路径的情况下从索引中删除78

【问题讨论】:

    标签: ios arrays tableview


    【解决方案1】:

    您可以使用过滤器从数组中删除值:

    let newArray = [25, 45, 69, 78, 63].filter { $0 != 78 }
    

    【讨论】:

    • 你能详细说明你的答案吗,即我需要删除 78 ,但是数组只有索引来删除我应该如何删除这个
    • @KarthickTM 你这样使用它: let newArray = songIDArray.filter { $0 != 78 }
    【解决方案2】:

    removeAll是条件移除命令。

    var array = [25,45,69,78,63]
    array.removeAll{$0 == 78}
    print(array)
    
    //[25, 45, 69, 63]
    

    【讨论】:

      【解决方案3】:

      这里有几个选项,以最适合您的具体用例为准!

      过滤删除

      过滤器函数将数组中的每个元素传递给您提供的代码块,并删除您返回false 的所有项目。这对于执行简单的过滤器很有用,但如果您还需要已删除项目的索引(例如重新加载表视图索引路径),则不是很有用。

      songIDArray = songIDArray.filter({ id in
          return id != 78
      })
      

      按索引删除

      首先获取要删除的索引,您可以根据数组中的项目类型以各种方式执行此操作。如果它们符合Equatable(整数),您可以使用

      if let removalIndex = songIDArray.firstIndex(of: 78) {
          songIDArray.remove(at: removalIndex)
      }
      

      如果您没有 Equatable 元素的数组,那么您可以改用 index(where:),它返回您从提供的闭包中返回 true 的第一个索引:

      if let removalIndex = songIDArray.index(where: { id in
          return id == 78
      }) {
          songIDArray.remove(at: removalIndex)
      }
      

      如果您还需要对索引执行其他操作,例如在特定索引路径重新加载 UITableViewCell 以反映您的更改等,此方法很有用。

      全部删除

      在 swift 4.2 中还有一个 removeAll(where:) 函数,其工作方式类似于 filter,但不返回新数组:

      songIDArray.removeAll(where: { id in
          return id == 78
      })
      

      【讨论】:

      • 当数组是 NSMUTABLEARRAY() 类型时会发生什么
      • 你有一个NSMutableArray 而不是一个快速数组有什么特别的原因吗?我相信无论如何它都应该可以转换为 swift 数组(虽然我还没有尝试过)!
      猜你喜欢
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2021-08-03
      • 1970-01-01
      相关资源
      最近更新 更多