Isk*_*rak 3 functional-programming rust
在 Rust 中,是否有类似地图的等价物可以根据我可以选择的条件停止迭代?
我想迭代一个向量,在每个元素上调用一个函数并存储结果,但如果函数返回值满足条件,则停止迭代
迭代伪代码示例:
results = []
for elem in vec:
result = foo(elem)
if result is None
break
results.push(result)
Run Code Online (Sandbox Code Playgroud)
我可以通过改变初始状态来实现与scan相当的笨拙,但是(AFAIK)它仍然会遍历每个元素:
扫描变体的类似 Rust 的伪代码:
results = vec.iter().scan(false, |fail, elem|
if *fail
return None
result = foo(elem)
if result is None
*fail = true
return result
).collect()
Run Code Online (Sandbox Code Playgroud)
results = vec.iter().map(foo).take_while(|e| e.is_some()).collect()
Run Code Online (Sandbox Code Playgroud)
Rust 中的迭代器是惰性求值的。本质上,调用collect强制迭代器的每个元素一次评估一个。这意味着一旦某个元素使 in 的谓词失败take_while,就不会从初始迭代器中读取更多元素,更不用说通过 了map。
| 归档时间: |
|
| 查看次数: |
1878 次 |
| 最近记录: |