# Mathematical and Aggregate Operators

• toArray
将观察序列多个元素转换为单个元素的序列，这个元素就是源序列元素的数组集合
``````example("toArray") {
let disposeBag = DisposeBag()
Observable.range(start: 1, count: 10)
.toArray()
.subscribe { print(\$0) }
.disposed(by: disposeBag)
}

// 控制台打印的结果：
--- toArray example ---
next([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
completed
``````
• reduce
类似于scan,有一个种子值和一个操作符，对种子值作为第一个值与第一个元素进行计算，结果作为新的种子值与第二个元素进行计算。与scan不用的是，reduce的是取最后一个计算结果作为新的序列的元素
``````example("reduce") {
let disposeBag = DisposeBag()

Observable.of(10, 100, 1000)
.reduce(1, accumulator: +)
.subscribe(onNext: { print(\$0) })
.disposed(by: disposeBag)
}

// 控制台打印的结果：
--- reduce example ---
1111
``````
• concat
用于多个序列的事件元素的链接，按照顺序的方式进行连接，当一个序列的元素连接完毕并结束后在链接下一个序列

``````example("concat") {
let disposeBag = DisposeBag()

let subject1 = BehaviorSubject(value: "🍎")
let subject2 = BehaviorSubject(value: "🐶")

let variable = Variable(subject1)

variable.asObservable()
.concat()
.subscribe { print(\$0) }
.disposed(by: disposeBag)

subject1.onNext("🍐")
subject1.onNext("🍊")

variable.value = subject2

subject2.onNext("I would be ignored")
subject2.onNext("🐱")

subject1.onCompleted()

subject2.onNext("🐭")
}

// 控制台打印的结果：
--- concat example ---
next(🍎)
next(🍐)
next(🍊)
next(🐱)
next(🐭)

``````