# zip

**通过一个函数将多个 `Observables` 的元素组合起来，然后将每一个组合的结果发出来**

![](https://4217506537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWj545abP2yK86-qksJ%2Fsync%2Fbbda4e09e7a1413ae1abe472f0c41bb98d9a88d3.png?generation=1616819385182748\&alt=media)

**zip** 操作符将多个(最多不超过8个) `Observables` 的元素通过一个函数组合起来，然后将这个组合的结果发出来。它会严格的按照序列的索引数进行组合。例如，返回的 `Observable` 的第一个元素，是由每一个源 `Observables` 的第一个元素组合出来的。它的第二个元素 ，是由每一个源 `Observables` 的第二个元素组合出来的。它的第三个元素 ，是由每一个源 `Observables` 的第三个元素组合出来的，以此类推。它的元素数量等于源 `Observables` 中元素数量最少的那个。

## 演示

```swift
let disposeBag = DisposeBag()
let first = PublishSubject<String>()
let second = PublishSubject<String>()

Observable.zip(first, second) { $0 + $1 }
          .subscribe(onNext: { print($0) })
          .disposed(by: disposeBag)

first.onNext("1")
second.onNext("A")
first.onNext("2")
second.onNext("B")
second.onNext("C")
second.onNext("D")
first.onNext("3")
first.onNext("4")
```

**输出结果：**

```swift
1A
2B
3C
4D
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://3440217568.gitbook.io/rxswift/decision_tree/zip.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
