reduce用法详解

作者: Hollylord | 来源:发表于2015-12-11 14:46 被阅读237次

基础知识

Reduce 的基础思想是将一个序列转换为一个不同类型的数据,期间通过一个累加器(Accumulator)来持续记录递增状态。

func reduce<T>(initial: T, combine: (T, Self.Generator.Element) -> T) -> T
func combinator(accumulator: Int, current: Int) -> Int { 
    return accumulator + current
}

[1, 2, 3].reduce(0, combine: combinator)
// 执行步骤如下
combinator(0, 1) { return 0 + 1 } = 1
combinator(1, 2) { return 1 + 2 } = 3
combinator(3, 3) { return 3 + 3 } = 6
= 6

初始值0会跟数组第一个元素运算,成为累加值,然后这个值在与数组第二个元素运算成为第二个累加值,以此类推,返回最后的结果。

实际用法

func rmap(elements: [Int], transform: (Int) -> Int) -> [Int] { 
    return elements.reduce([Int](), combine: { (var acc: [Int], obj: Int) -> [Int] in 
      acc.append(transform(obj)) 
      return acc })
    }

print(rmap([1, 2, 3, 4], transform: { $0 * 2}))
// [2, 4, 6, 8]

combine这个闭包有2个参数,$1表示每次运算的累加值,这个值也是最后要返回的,所以返回的类型也必须跟它保持一致;$2是便利数组后当前参与运算的一个数组元素。

分解上式代码:
  • 初始值$1 = 空数组[];当前值$2 = 1,数组的第一个元素。把$2添加到$1里面并返回$1 = [1]
  • 累加值$1 = [1],当前值$2 = 2,数组第二个元素。把$2添加到$1里面并返回$1 = [1,2]
  • 以此类推,返回最终结果为[2, 4, 6, 8]

相关文章

  • reduce用法详解

    基础知识 Reduce 的基础思想是将一个序列转换为一个不同类型的数据,期间通过一个累加器(Accumulator...

  • 3.常见高阶函数2

    reduce,fold用法

  • 2022-01-12

    reduce()用法arr.reduce(fuction(pre,cur,index,arr){},init)例子...

  • 用高中数学知识理解 Array.reduce

    Array.reduce 算是比较高级的用法了。 本文用一些例子来介绍。 01 reduce 用法 Array.r...

  • reduce用法

    accumulator 累计器currentValue 当前值currentIndex 当前索引array 数组

  • LiveData

    LiveDataBus实现原理#用法详解#LiveData扩展 LiveDataBus实现原理#用法详解#Live...

  • java 8 stream reduce详解和误区

    java 8 stream reduce详解和误区 简介 Stream API提供了一些预定义的reduce操作,...

  • 2018-04-10

    Array.reduce()的便捷用法兼具map和filter的双重用法

  • 2019-01-24记录

    计算函数被执行次数 ---- javascript reduce()函数的用法(): reduce函数可 接受一个...

  • IOS学习(13)-UITextView

    UITextView详解iOS开发系列之四 – UITextView 用法小结UITextView控件的用法详解

网友评论

    本文标题:reduce用法详解

    本文链接:https://www.haomeiwen.com/subject/vbuyhttx.html