首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift:从数组中删除特定对象的更好方法?

Swift:从数组中删除特定对象的更好方法?
EN

Stack Overflow用户
提问于 2018-08-29 03:55:32
回答 3查看 14K关注 0票数 11

我正在努力提高我的代码效率,但我正在胡思乱想。我写的这段代码工作得很好,它做的正是我需要它做的事情:它检查一个数组并删除一个未知索引的对象。但我觉得有一种更好、更有效的方式来写它。我访问了Array.remove(at:),但这需要一个已知的索引。我正在使用大O表示法,不知道如何让它更容易处理。有什么想法吗?

代码语言:javascript
运行
复制
 // create a new object array
 var sort : [MyCustomObject] = []

//iterate through my object array  

        for i in objectArray{
            if i === objectToRemove{
            }
            else{
                sort.append(i)
            }
        }

     // set old array to sort, which no longer has the unwanted object 
        self.objectArray = sort
EN

回答 3

Stack Overflow用户

发布于 2018-08-29 04:00:19

你可以试试

代码语言:javascript
运行
复制
if let ind = objectArray.index(of:objectToRemove) {
  objectArray.remove(at:ind)
}
票数 0
EN

Stack Overflow用户

发布于 2018-08-29 21:25:06

Swift 4

使用enumerated(),您将拥有索引:

代码语言:javascript
运行
复制
var array = ["a","b","c"]
let objectToRemove = "b"
for (index, value) in array.enumerated() {
    if value == objectToRemove {
        array.remove(at: index)
    }
}
print(array) // Prints: ["a","c"]

编辑:

或者更好的方法是使用filter:

代码语言:javascript
运行
复制
var array = ["a","b","c"]
let objectToRemove = "b"
array = array.filter { $0 != objectToRemove } // Keeps only what is
                                              // different from the 
                                              // objectToRemove
print(newArray)  // Prints: ["a","c"]
票数 0
EN

Stack Overflow用户

发布于 2020-06-15 16:16:52

您可以使用此泛型从数组中删除任何类型的对象

代码语言:javascript
运行
复制
extension Array where Element: Equatable {
mutating func removeObject(object: Element)  {
    if let index = firstIndex(of: object) {
        remove(at: index)
    }
}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52065329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档