加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 17:48:52 所属栏目:Java 来源:网络整理
导读:当函数以一系列值作为参数时,是否认为接受迭代器T的良好风格.而不是Vec T 这样,呼叫者可以自己决定如何存储该系列(在Vec,[T; N]或其他任何内容中),实际上应该是可选的 T).此外,这样就无需将您所拥有的任何内容转换成Vec,而且在应用了一些Iterator修饰符之后,
当函数以一系列值作为参数时,是否认为接受迭代器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,因为它能够计算出最终结果将在多长时间内,因此可以一次性分配正确的长度字符串,但这仅仅是一个概念的证明,以及多少花哨技术可以结合起来.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读