数组 – 尽可能采取`Iterator`而不是`Vec`?

前端之家收集整理的这篇文章主要介绍了数组 – 尽可能采取`Iterator`而不是`Vec`?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
函数以一系列值作为参数时,是否认为接受迭代器T的良好风格.而不是Vec T

这样,呼叫者可以自己决定如何存储该系列(在Vec,[T; N]或其他任何内容中),实际上应该是可选的< T>).此外,这样就无需将您所拥有的任何内容转换成Vec,而且在应用了一些Iterator修饰符之后,不需要.collect().所以也应该更快!

我错过了什么,还是这样做呢?

解决方法

你所描述的这样的功能通常应该是一个 IntoIterator<Item = T>;因此它可以接受迭代器< T>和Vec T作为输入.

这也可以与其他技术结合使用;例如,该方法concat将接受& str(通过auto deref / ref强制)& [String](以及& Vec< String)& [& str](以及& Vec&,& str迭代器,String迭代器等:

use std::borrow::Borrow;

fn concat<T: Borrow<str>,Iter: IntoIterator<Item = T>>(iter: Iter) -> String {
    iter.into_iter()  // -> impl Iterator<Item = T>
        .map(|s| s.borrow()) // -> impl Iterator<Item = &str>
        .collect()  // -> String
}

(这个具体的例子实际上通常会更适合于SliceConcatExt,因为它能够计算出最终结果将在多长时间内,因此可以一次性分配正确的长度字符串,但这仅仅是一个概念的证明,以及多少花哨技术可以结合起来.)

猜你在找的Java相关文章