Swift 中通过值移除数组中的对象
为了通过值从 Swift 中的数组中移除一个对象,您可以为 Array 类型创建一个扩展。然后,您可以调用该函数,该函数将要消除的值作为参数。在本文中,我们将使用 filter 函数通过值在 Swift 语言中移除对象。让我们看一些如何通过值从数组中移除对象的示例。
示例 1:使用 Filter 函数移除对象
您可以使用内置的 filter 方法创建一个不包含匹配值的新数组。
算法
步骤 1 − 为数组创建扩展
步骤 2 − 使用 where 子句将元素类型定义为 Equatable
步骤 3 − 定义一个名为 remove(:) 的函数,并以元素作为参数
步骤 4 − 使用 filter 函数过滤掉除了参数之外的所有元素
示例
import Foundation
extension Array where Element: Equatable {
mutating func remove(_ element: Element) {
self = filter { $0 != element }
}
}
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("Original array: \(numbers)")
numbers.remove(3)
print("Modified array: \(numbers)")
输出
Original array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Modified array: [0, 1, 2, 4, 5, 6, 7, 8, 9]
请记住,remove 函数可以更改初始数组,因为它被指定为修改数组。在这种情况下,它用一个新的数组替换旧的数组,该数组省略了请求的值。
示例 2:使用 Filter 函数移除自定义结构体对象
在本例中,我们将使用以下步骤从数组中移除一个自定义对象(例如,结构体)。
算法
步骤 1 − 为数组创建扩展
步骤 2 − 使用 where 子句将元素类型定义为 Equatable
步骤 3 − 定义一个名为 remove(:) 的函数,并以元素作为参数
步骤 4 − 使用 filter 函数过滤掉除了参数之外的所有元素
import Foundation
extension Array where Element: Equatable {
mutating func remove(_ element: Element) {
self = filter { $0 != element }
}
}
struct Person: Equatable {
let name: String
let age: Int
}
var people = [
Person(name: "Alice", age: 30),
Person(name: "Bob", age: 25),
Person(name: "Charlie", age: 35),
Person(name: "Dave", age: 20)
]
print("Original array count: \(people.count)")
// Remove a person with a specific name and age
let personToRemove = Person(name: "Bob", age: 25)
print("Removing person: \(personToRemove)")
people.remove(personToRemove)
print("Modified array count: \(people.count)")
以下是输出
Original array count: 4 Removing person: Person(name: "Bob", age: 25) Modified array count: 3
在创建扩展以及名为“remove”的方法并符合 Equatable 协议后,我们正在移除一个名为“personToRemove”、名称为“Bob”且年龄为“25”的对象。该对象符合 Equatable 协议,因此扩展知道如何比较对象并在对象之间找到匹配项时移除它们。
结论
总之,向 Swift Array 类型添加扩展可以成为扩展语言潜力的有效方法。我们可以根据任何条件从数组中移除对象,方法是开发一个扩展,该扩展为包含 Equatable 成员的数组提供 remove 方法。这让我们在定义移除条件和可以移除的内容方面具有很大的灵活性。
该附加组件使用内置的 filter 技术创建了一个不包含匹配值的新数组。由于我们正在生成一个新数组而不是修改现有的数组,因此我们必须将删除方法指定为 mutating,以允许它影响初始数组。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP