Swift reduce函数使用示例详解

 更新时间:2023年07月07日 10:36:36   作者:大刘  
这篇文章主要为大家介绍了Swift reduce函数使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

reduce

Swift中数组的reduce方法用于做序列元素的累加,如数组元素的累加, 函数原型:

@inlinable 
public func reduce<Result>(
    _ initialResult: Result, 
    _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

参数

  • initialResult: 初始值, The value to use as the initial accumulating value. initialResult is passed to nextPartialResult the first time the closure is executed.
  • nextPartialResult: 下一次累加的基准值

示例

var arr = [1, 2, 3, 4, 5, 6, 7, 8]
/// initialResult: Result 初始值;
/// nextPartialResult:(Result, Int) 下一轮计算值, Result = initialResult + Int
/// Result是每轮计算的返回值(结果), Int 是数组元素
/// -&gt; Result 返回值
/// `arr.reduce(initialResult: Result, nextPartialResult: (Result, Int) throws -&gt; Result(Result, Int) throws -&gt; Result&gt;)`
var sum = arr.reduce(100) { partialResult, value in
    print("\(value) --&gt; \(partialResult)")
    return partialResult + value // return 可省略
}
// 初始值是100,第一步就是:
// 100 + 1
// 再把2加上 --&gt; 100 + 1 + 2
// 再把3加上 --&gt; 100 + 1 + 2 + 3
// ...
print(sum) // 136

当然,也有好吃的语法糖,效果是一样的:

sum = arr.reduce(100) {
    $0 + $1
}
print(sum)

reduce(into:)

reduce(into:)方法也是一个实用方法,主要作用是遍历数组中的元素,把它们into到另一个对象中,示例:

如下有一个数组,把偶数放一个数组中,把奇数放一个数组中:

let nums = [1,2,3,4,5]
let result = nums.reduce(into: [[],[]]) { arr, num in
    arr[num%2].append(num)
}
print(result[0]) // [2, 4]
print(result[1]) // [1, 3, 5]

这里into:后面的[[], []]是一个二级数组,这个二维数组即闭包中的arr, 而闭包中的num是nums数组中每一个值,遍历后把这个二维数组返回 (由函数原型的inout可知,返回的其实就是into:参数,本例中即二维数组)

func reduce<Result>(into: Result, 
_ updateAccumulatingResult: (inout Result, Element) 
throws -> ()
) 
-> Result

为了更方例理解,展开为:

temp[1].append(1) //1%2 = 1/2 left 1 [[][1]]
temp[0].append(2) //2%2 = 2/2 left 0 [[2][1]]
temp[1].append(3) //3%2 = 3/2 = 1 left 1 [[2][1,3]]
temp[0].append(4) //4%2 = 4/2 left 0 [[2,4][1,3]]
temp[1].append(5) //5%2 = 5/2 = 2 left 1 [[2,4][1,3,5]]

示例参考:https://stackoverflow.com/questions/62103658/how-do-you-use-reduceinto-in-swift

再来看一个示例:

// 统计下面的字符串中每个字符的使用次数
let letters = "abracadabra"
let letterCount = letters.reduce(into: [:]) { counts, letter in
    counts[letter, default: 0] += 1
}
print(letterCount) // ["a": 5, "r": 2, "c": 1, "b": 2, "d": 1]

其实就是遍历字符串,然后把它们into到字典[:]中

还有个示例:https://www.jb51.net/article/279000.htm说的比较好直接粘过来:

struct Person {
    enum Gender {
        case male
        case female
    }
    var name = ""
    var age = 0
    var gender = Gender.female
}
let dataSource = [Person(name: "鸡大宝", age: 38, gender: .male),
                  Person(name: "江主任", age: 50, gender: .female),
                  Person(name: "可乐", age: 10, gender: .female),
                  Person(name: "伍六七", age: 16, gender: .male),
                  Person(name: "梅花十三", age: 20, gender: .female)]
// 获取数据源中男女各多少人
let genderCount = dataSource.reduce(into: [Person.Gender: Int]()) { result, person in
    result[person.gender, default: 0] += 1
}
let maleCount = genderCount[Person.Gender.male] // 2
let femaleCount = genderCount[Person.Gender.female] // 3
print(maleCount ?? 0) // 2
print(femaleCount ?? 0) // 3

通过这些示例,再不懂,中午就不要吃饭了

以上就是Swift reduce函数使用示例详解的详细内容,更多关于Swift reduce函数的资料请关注脚本之家其它相关文章!

相关文章

  • swift在IOS应用图标上添加提醒个数的方法

    swift在IOS应用图标上添加提醒个数的方法

    本文是通过swift语言实现在应用图标右上角添加消息个数提醒的功能,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-08-08
  • Swift心得笔记之字符串

    Swift心得笔记之字符串

    Swift 的 String 类型是值类型 。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。
    2015-04-04
  • Swift Extension扩展得使用详细介绍

    Swift Extension扩展得使用详细介绍

    在swift中,extension与Objective-C的category有点类似,但是extension比起category来说更加强大和灵活,它不仅可以扩展某种类型或结构体的方法,同时它还可以与protocol等结合使用,编写出更加灵活和强大的代码
    2022-09-09
  • SwiftUI 中创建反弹动画的实现

    SwiftUI 中创建反弹动画的实现

    这篇文章主要介绍了SwiftUI 中创建反弹动画的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Objective-C中的block与Swift中的尾随闭包使用教程

    Objective-C中的block与Swift中的尾随闭包使用教程

    Block是OC中的闭包,他和swift中的闭包有什么区别呢?下面这篇文章就来给大家介绍关于Objective-C中的block与Swift中的尾随闭包使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • Swift与C语言指针结合使用实例

    Swift与C语言指针结合使用实例

    这篇文章主要介绍了Swift与C语言指针结合使用实例,本文讲解了用以输入/输出的参数指针、作为数组使用的参数指针、用作字符串参数的指针、指针参数转换的安全性等内容,需要的朋友可以参考下
    2015-05-05
  • Swift5中从原始文本创建字符串的方法

    Swift5中从原始文本创建字符串的方法

    这篇文章主要给大家介绍了关于Swift5中从原始文本创建字符串的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Swift5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • swift4.2实现新闻首页导航

    swift4.2实现新闻首页导航

    这篇文章主要为大家详细介绍了swift4.2实现新闻首页导航,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • RxSwift实现替换delegate的方法示例

    RxSwift实现替换delegate的方法示例

    这篇文章主要给大家介绍了关于RxSwift实现替换delegate的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用RxSwift具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Swift实现快速排序算法的代码示例

    Swift实现快速排序算法的代码示例

    这篇文章主要介绍了Swift实现快速排序算法的代码示例,首先利用分治法讲解了快速排序的思路,需要的朋友可以参考下
    2016-07-07

最新评论