Rust 迭代器的適配器:chain

chain 適配器將一個迭代器附加到另一個迭代器的末尾。具體來說就是,i1.chain(i2) 返回一個迭代器,該迭代器先從 i1 中獲取各項,直到 i1 被耗盡後再從 i2 中獲取項。

chain 適配器的簽名如下:

fn chain<U>(self, other: U) -> impl Iterator<Item=Self::Item>
    where Self: Sized, U: IntoIterator<Item=Self::Item>;

換句話說,有了該適配器後,可以將一個迭代器與任何產生相同類型的可迭代對象進行鏈式連接。

比如:

let v: Vec<i32> = (1..4).chain(vec![20, 30, 40])
    .collect();
assert_eq!(v, [1, 2, 3, 20, 30, 40]);

如果鏈式迭代器的兩個底層迭代器均可逆,那麼鏈式迭代器本身也可逆:

let v: Vec<i32> = (1..4).chain(vec![20, 30, 40])
    .rev()
    .collect();
assert_eq!(v, [40, 30, 20, 3, 2, 1]);

鏈式迭代器會跟蹤兩個底層迭代器是否返回了 None,並根據需要在其中一個迭代器上調用 next 或 next_back 方法。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/yZWPtuojDrmcNosx20kv6g