我在阵列处理中工作,应用程序的整体工作是用户可以选择必须添加到特定播放列表的歌曲数量。我已经使用tableview列出了用户单击tableView单元格时列出歌曲。查看已找到的选中标记时,我将删除。。" Songidarray"是用于保存的数组。当用户取消选择歌曲时,我必须删除特定的歌曲" Track ID"。但是在数组中,它已删除(在:索引)我无法通过索引删除它。请帮助我
例如:**我的数组是**
songIDArray = [25,45,69,78,63]
我需要在不知道索引路径的情况下从索引中删除78
。
您可以使用过滤器从数组中删除值:
let newArray = [25, 45, 69, 78, 63].filter { $0 != 78 }
removeAll
是有条件删除的命令。
var array = [25,45,69,78,63]
array.removeAll{$0 == 78}
print(array)
//[25, 45, 69, 63]
您在这里有一些选项,最适合您的用例!
通过过滤
删除过滤器功能将数组中的每个元素传递到您提供的代码块,并删除您返回的false
的所有项目。这对于执行简单的过滤器很有用,但是如果您还需要删除项目的索引(例如,重新加载表视图索引路径),则不是很有用。
songIDArray = songIDArray.filter({ id in
return id != 78
})
通过索引
删除首先获取要删除的索引,您可以根据数组中的项目类型来以各种方式进行此操作。如果它们符合Equatable
(整数),则可以使用
if let removalIndex = songIDArray.firstIndex(of: 78) {
songIDArray.remove(at: removalIndex)
}
如果您没有Equatable
元素的数组,则可以使用index(where:)
返回您从提供的关闭中返回的第一个索引:
if let removalIndex = songIDArray.index(where: { id in
return id == 78
}) {
songIDArray.remove(at: removalIndex)
}
如果您还需要使用索引做其他事情,例如在特定索引路径上重新加载 UITableViewCell
,以反映您的更改e.t.c。
删除所有
在Swift 4.2中,还有一个removeAll(where:)
功能,其工作类似于filter
,但不返回新数组:
songIDArray.removeAll(where: { id in
return id == 78
})