Swift 中的多维数组扁平化


在 Swift 中,您可以使用高阶函数来扁平化多维数组。您可以结合使用 joined()、reduce() 和 flatMap() 函数。有时,您需要将多个数组合并成单个数组。在 Swift 中,您可以使用高阶函数轻松实现。在本文中,我们将看到一些不同用例的示例。

示例 1:使用 flatMap() 函数

要扁平化 Swift 中的多维数组,您可以将 joined() 方法与 flatMap() 函数一起使用。这是一个示例。

import Foundation
let arrayOfArrays = [[1, 2], [3, 4], [5, 6, 7]]
let flattenedArray = arrayOfArrays.flatMap { $0 }
print("Input array: \(arrayOfArrays)")
print("Flattened Array: \(flattenedArray)")

输出

Input array: [[1, 2], [3, 4], [5, 6, 7]]
Flattened Array: [1, 2, 3, 4, 5, 6, 7]

在这个示例中,flatMap() 用于将 arrayOfArrays 中的每个子数组映射到其元素,然后使用 joined() 将结果数组连接在一起形成单个扁平数组。

示例 2:使用 reduce() 函数

或者,您可以使用 reduce() 方法来扁平化数组。这是一个示例。

import Foundation
let arrayOfArrays = [[1, 2], [3, 4], [5, 6, 7]]
let flattenedArray = arrayOfArrays.reduce([], +)
print("Input array: \(arrayOfArrays)")
print("Flattened Array: \(flattenedArray)")

输出

Input array: [[1, 2], [3, 4], [5, 6, 7]]
Flattened Array: [1, 2, 3, 4, 5, 6, 7]

在这个示例中,reduce() 用于通过从空数组开始并使用 + 运算符附加每个子数组来将所有子数组组合成单个数组。

示例 3:扁平化包含可选值的数组

或者,您可以使用 flatMap() 方法来扁平化可选数组。这是一个示例。

import Foundation
let arrayOfArrays: [[Int?]] = [[1, nil], [3, 4, 5], [nil, 7]]
let flattenedArray = arrayOfArrays.flatMap { $0 }
print("Input array: \(arrayOfArrays)")
print("Flattened Array: \(flattenedArray)")

输出

Input array: [[Optional(1), nil], [Optional(3), Optional(4), Optional(5)], [nil, Optional(7)]]
Flattened Array: [Optional(1), nil, Optional(3), Optional(4), Optional(5), nil, Optional(7)]

在这个示例中,arrayOfArrays 是一个包含 Int? 可选值的数组。生成的 flattenedArray 包含子数组的所有元素,包括 nil 值。

示例 4:扁平化包含重复元素的数组

或者,您可以使用 Set 和 flatMap() 方法来扁平化数组。这是一个示例。

import Foundation
let arrayOfArrays = [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
let flattenedArray = Set(arrayOfArrays.flatMap { $0 })
print("Input array: \(arrayOfArrays)")
print("Flattened Array: \(flattenedArray)")

输出

Input array: [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
Flattened Array: [5, 1, 4, 3, 2]

在这个示例中,arrayOfArrays 是一个包含一些重复元素的数组。生成的 flattenedArray 是子数组中所有唯一元素的集合,没有特定顺序。

示例 5:扁平化字符串数组以用于搜索栏

或者,您可以使用 flatMap() 方法来扁平化字符串数组。这是一个示例。

import Foundation
let arrayOfArrays = [["apple", "orange"], ["banana", "grape"], ["pear", "pineapple"]]
let flattenedArray = Set(arrayOfArrays.flatMap { $0 })
print("Input array: \(arrayOfArrays)")
print("Flattened Array: \(flattenedArray)")

输出

Input array: [["apple", "orange"], ["banana", "grape"], ["pear", "pineapple"]]
Flattened Array: ["pineapple", "grape", "apple", "orange", "pear", "banana"]

在这个示例中,arrayOfArrays 是一个字符串数组,表示不同类型的水果。生成的 flattenedArray 可用作搜索栏的数据源,允许用户按名称搜索任何水果。

示例 6:使用 Swift 中的 for 循环扁平化多维数组

在您需要更多控制迭代过程的情况下,使用 for 循环可能很有用。这是一个示例。

import Foundation
let arrayOfArrays = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
var flattenedArray: [Int] = []
for subArray in arrayOfArrays {
   for element in subArray {
      flattenedArray.append(element)
   }
}
print("Input array: \(arrayOfArrays)")
print("Flattened Array: \(flattenedArray)")

输出

Input array: [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
Flattened Array: [1, 2, 3, 4, 5, 6, 7, 8, 9]

在这个示例中,我们从一个包含 Int 值的 arrayOfArrays 开始,表示不同的数据子集。然后,我们声明一个类型为 [Int] 的空 flattenedArray 来保存扁平化的值。

然后,我们使用嵌套 for 循环迭代 arrayOfArrays 中的每个子数组,对于每个子数组,我们迭代子数组中的每个元素并将其附加到 flattenedArray。

结论

在 Swift 中,扁平化多维数组意味着将嵌套数组结构转换为单个扁平数组,其中包含子数组中的所有元素,按照其出现的顺序排列。

在 Swift 中扁平化多维数组的方法有很多,包括使用 flatMap 方法(这是一种简洁高效的方法)和使用 for 循环(这提供了对迭代过程的更多控制)。

扁平化多维数组在许多实际场景中都很有用。例如,准备用于搜索栏、图表或表视图中的数据。

更新于:2023年5月4日

2K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告