我是函数式编程的新手。我的问题是我有一个主数组和固定数量的“目标”数组。我想根据每个元素的特定值将主数组中的元素分配到正确的结果数组中。
我猜测一种方法是使用一个映射函数来遍历主数组元素,确定正确的“目标数组”值(基于某种逻辑),然后将元素添加到该数组中。然而,我不确定这是否非常FP。毕竟,我导致了更改正在映射的主数组外部的数组的副作用。
在 FP 中你会如何正确地做到这一点?
这是我的想法:你可以使用reduce
以消除副作用。不要预先创建数组,而是创建数组字典。
例如,下面是一个扩展,允许您通过应用函数来对原始数组的元素进行分组:
extension Array {
func groupBy<T: Hashable>(f: Element -> T) -> [T: [Element]] {
return self.reduce([T: [Element]]()) { (var aggregate, element) in
let key = f(element)
if aggregate[key] != nil {
aggregate[key]!.append(element)
} else {
aggregate[key] = [element]
}
return aggregate
}
}
}
示例 1:按奇数/偶数对数字进行分组
let x = [1,2,3,4]
let y = x.groupBy {
$0 % 2 == 0 ? "even" : "odd"
}
示例 2:按长度对字符串进行分组
let arr1 = ["lorem", "ipsum", "dolor", "sit", "amet"]
let arr2 = arr1.groupBy {
$0.characters.count
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)