首页 > 其他分享 >Rust学习笔记

Rust学习笔记

时间:2024-01-28 23:11:23浏览次数:33  
标签:返回 迭代 Rust iter 学习 笔记 集合 fn 引用

迭代器

迭代器是一个值,它可以生成一系列值

Iterrator 类型和 IntoIterator类型

  • 迭代器是实现了Iterator类型的任意值
  • IntoIterator是迭代器本身类型,Item是它生成的值的类型。
  • 任意实现了IntoIterator的类型都可以成为可迭代者,可以通过into_iter获得一个迭代器
  • 迭代器能生成值
  • 迭代器生成的值是Item(条目)
  • 接收迭代器条目的代码是消费者
  • 大多数集合提供了iter和iter_mut方法,会返回该类型的迭代器,为每个条目生成共享引用或可变引用
  • 给一个集合的共享引用,into_iter会返回一个条目的共享引用

  • 给一个集合的可变引用,into_iter会返回一个条目的可变引用

  • 当按值传递集合,into_iter会返回一个迭代器,获得集合的所有权,按值返回。这些值的所有权会传递给消费者,在迭代过程中消耗掉。

  • 并非所有类型都提供了这3种实现,HashSet,BTreaSet,BinaryHeap不会在可变引用上实现IntoIterator,修改元素会破坏自身不变性规则-修改后的值可能有不同的hash。

from_fn 和 successors

from_fn:给定返回Option的函数,std::iter::from_fn会返回一个迭代器,它会调用fn来生成条目

successors:如果每个条目依赖前一个条目,std::iter::successors比较适合。提供一个初始条件和一个函数,且该函数能接受一个条目并返回下一个条目的Option。如果返回None则结束。

from_fn与successors都接受FnMut闭包

fn fibonacci() - > impl Iterator <Item=usize>{
  let mut sate = (0,1);
  std::iter::from_fn(move ||{
    state = (state.1, state.0 + state.1);
    Some(state.0)  
})
}

assert_eq!(fibonacci().take(8).collect::<Vec<_>>(),
                      vec![1,1,2,3,5,8,13,21]);

from_fn successors 方法非常灵活,你可以将任何对迭代器的使用用它们来改写。
在使用这两个方法前,请确保你了解其他的迭代器不是最优的选择。

drain

许多集合提供了drain方法(抽取方法)。drain会接受一个对集合的可变引用,返回一个迭代器,将每个元素的所有权传给消费者。
与into_iter不同,drain只会借入对集合的可变引用,当迭代器丢弃时,它会从集合中移除所有剩余元素以清空集合。

标签:返回,迭代,Rust,iter,学习,笔记,集合,fn,引用
From: https://www.cnblogs.com/tmacy/p/17993584

相关文章

  • 学习笔记推荐:极客时间《Java常见错误100例》
    最近,我有幸接触了一套非常精彩的学习笔记,《Java常见错误100例》。(手册链接在文末!!!)这套学习笔记出自极客时间,对于想要在Java开发领域深耕细作的朋友们来说,它无疑是一个不可多得的宝藏。接下来,我将结合其内容目录中的一些亮点,为大家进行简要介绍。首先,这套学习笔记囊括了Java......
  • k8s笔记17(组播测试代码)
    摘要:mc_svcttl;mc_clittl;mcjoin;smcrouted;ompingk8s笔记13(SMCRoute)_ATCtoK8s空管智能运维的技术博客_51CTO博客(第2项)k8s笔记14_ATCtoK8s空管智能运维的技术博客_51CTO博客(第2、8项)测试OK:(前提k8s-node07和k8s-node08运行smcrouted)--->k8s-node07smcroute.confmgroupfromen......
  • Python笔记四之协程
    本文首发于公众号:Hunter后端原文链接:Python笔记四之协程协程是一种运行在单线程下的并发编程模型,它的特点是能够在一个线程内实现多个任务的并发操作,通过在执行任务时主动让出执行权,让其他任务继续执行,从而实现并发。以下所有的代码都是在Python3.8版本中运行。本篇笔记......
  • 【计网笔记】物理层的基本概念
    物理层的基本概念物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。现有的计算机网络中的硬件设备和传输媒体的种类非常繁多,而通信手段也有许多不同方式。物理层的作用正是要尽可能地屏蔽掉这些传输媒体和通信手段的差异,使物理层上面......
  • P>M>F:基于预训练-元训练-微调流程的小样本学习方法
    目录论文创新点三阶段流程论文地址:PushingtheLimitsofSimplePipelinesforFew-ShotLearning:ExternalDataandFine-TuningMakeaDifferenceCVPR2022SumsungResearch'sGlobalAICenters创新点探讨了在少样本学习中利用外部数据和微调的三阶段......
  • [刷题笔记] 关于栈 & 队列常用操作方法的再探索
    Part0:序其实本来这都是很基础的东西,可惜野路子出身基础并不扎实。借着这个机会整合一下吧。也做了一些题了解了一些基本操作方法。本文对于栈和队列的原理不再过多赘述,默认读者掌握基本原理。参考题单:数据结构加强001:栈和队列2024现代信息学测试1:栈和队列本文所讲例题......
  • MarkDown学习
    标题+空格+标题名再回车是一级标题+空格+标题名再回车是二级标题+空格+标题名再回车是三级标题+空格+标题名再回车是四级标题字体两边都加两个星号是加粗显示两边都加一个星号是斜体两边都加三个星号是斜体加粗两边都加两个波浪号是删除引用选择狂神学Java,走向人生巅......
  • Java学习日记 Day14
    算法:①二叉搜索树的最近祖先:我用了二叉树最近祖先的同样的方法,没有考虑二叉树的定义。还是先判断当前节点情况,然后做递归调用,判断左右节点的情况。②二叉搜索树添加节点:这个要明白添加的节点一定在最后,所以只要判断节点数值大小,一直递归调用就好。③二叉搜索树删除节点:删除分几......
  • Kubernetes 学习整理(五)
    k8s-ConfigMapConfigureaPodtoUseaConfigMapCreateaConfigMapCreateaConfigMapfromadirectory读取configmap内容并以yaml格式输出createconfigmapfromsingleonefileormorefilescreateconfigmapfromaenvfile:--from-env-file也支持多个en......
  • 跟着思兼学习Klipper(26): 大卸八块 Klipper 远程控制实验汇总
    又名《给创想三维K1找个"强力外援"》前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎交流指正。文章如有更新请访问DFRobot社区及cnblogs博客园,前者内容较全,后者排版及阅读体验更佳。我们约定:主板指MCU部分,上位机指运行Klippy的MPULinux部分。玩了好......