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,以允許它影響初始陣列。

更新於: 2023年4月4日

719 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告