Swift中的集合中的过滤和映射

Swift中的数组、字典等集合类型提供了非常强大的过滤filter和映射map方法,可以极大地提高我们处理集合数据的代码质量。

过滤(Filter)

filter方法可以过滤数组或者集合,只留下满足条件的元素:

let numbers = [1, 2, 3, 4, 5, 6]

let evenNumbers = numbers.filter { 
  $0 % 2 == 0
} 

// evenNumbers 为 [2, 4, 6]

这里我们过滤出所有偶数。filter返回一个新数组。

映射(Map)

map方法可以把集合中的每个元素映射到一个新的值:

let doubledNumbers = numbers.map {
  $0 * 2 
}

// doubledNumbers 为 [2, 4, 6, 8, 10, 12]

它将每个数字映射成了2倍的数字。

我们也可以将字符串数组映射为长度数组:

let strings = ["a", "ab", "abc"]

let lengths = strings.map {
  $0.count
} // lengths 为 [1, 2, 3]

组合使用

filter和map可以组合使用实现更复杂的过滤映射操作:

let filteredMapped = numbers.filter{ $0 > 4 }
                            .map{ $0 * 2 }
// 最终得到 [10, 12]                            

综上所述,filter和map是处理Swift集合非常重要、常用的工具,合理运用可以大幅提升代码效率和可读性。