Rust语言迭代器与容器常用方法汇总

迭代器的常用方法:

next():返回迭代器中当前应迭代的元素且迭代器前进(消耗当前元素)。

next_back():返回迭代器中最后一个元素,且消耗掉那个元素。

last():消耗整个迭代器,返回迭代器最后一个元素。

nth():返回第n个迭代器元素(从0开始),并且消耗掉从0开始至该元素的所有元素。

nth_back():返回从尾部至前的第n个元素(从0开始计数),并且消耗掉从尾部至该元素的所有元素。

rev():反向遍历迭代器。

peekable():将迭代器转化为可以使用peek()方法的迭代器,从而可以查看当前应访问元素值,而不消耗元素。

peek():返回迭代器当前应访问元素的引用而不消耗它。

peek_mut():返回迭代器当前应访问元素的可变引用而不消耗它。

step_by():按步长跳跃访问迭代器元素。第一个元素总会被访问。若步长为1,则访问每一个元素;步长为2,则每间隔一个元素访问。以此类推。

take():返回一个新的迭代器,取前n个元素。

take_while():将迭代元素传入闭包,在闭包内计算后返回一个布尔值。当返回值为True,原迭代器元素传出;直到遇到False,则迭代结束。

chain():将两个迭代器连接起来。

collect():将迭代元素收集到容器内。

count():消耗掉迭代器,数出迭代器中迭代元素的个数。

len():返回迭代器长度。

skip():返回一个新的迭代器,跳过前n个元素。

skip_while():将迭代元素传入闭包,在闭包内计算后返回一个布尔值。若返回值为True则跳过。直到返回值为False开始正常迭代。(遇到第一个False后,不再判断True/False,全部迭代)

cycle():让迭代器不停循环。

enumerate():对原迭代器进行修改,新的迭代器迭代元素的同时进行计数,每次迭代返回一个元组,含当前计数和原迭代元素数据。

max():返回迭代器当中的最大值。

max_by():使用自定义的比较大小闭包作为参数传入,该闭包返回值为Ordering,从而实现自定义的比较大小方式来最迭代器找寻最大值。

max_by_key():将迭代元素传入闭包,在闭包内计算后返回一个可以比较大小的数据类型,返回根据该返回数据排序的最大值,从而实现对各数据结构和容器进行排序。

min()、min_by()、min_by_key同上,只是由找寻最大值改为找寻最小值。

sum():将迭代器内所有元素求和,返回结果。

product():将迭代器内所有元素连乘,返回结果。

map():将迭代元素传入闭包,在闭包内计算后将闭包返回值传出,从而形成一个新的迭代器。

map_while():将迭代元素传入闭包并计算返回后,若返回值为Some()则传递出去,若返回值为None则结束迭代。

fiflter():将迭代元素传入闭包,在闭包内计算后返回一个布尔值。迭代器将返回False的元素过滤掉,只传出闭包中返回True的原元素。

filter_map():将迭代元素传入闭包,在闭包内计算后返回一个Option。只有返回的Option为Some的元素,会将该Some()的值经由filter传出。

find():将迭代元素传入闭包,在闭包内计算后返回一个布尔值。找到第一个返回True的元素,将该元素返回。若没有找到,则返回None。

rfind():find的反方向遍历版本。

find_map():将迭代元素传入闭包,在闭包内计算后返回一个Option。找到第一个结果为Some()的元素,传出这个Some()值。等效于filter_map().next()。

position():将迭代元素传入闭包,在闭包内计算后返回一个布尔值。搜索第一个找到的返回True的元素,返回其下标Some(Index),没找到则返回None。

rposition():position的反方向遍历版本。

flatten():将多维容器的迭代器或迭代器的迭代器,展开为线性的迭代器。

flat_map():将多维容器的迭代器或迭代器的迭代器,展开为线性的迭代器后,再进行map闭包运算,返回新的迭代器。

fold():该方法通过积累变量和闭包实现诸如累加、累乘等各类迭代算法。使用该方法需要传入两个参数,第一个是累积变量的初始值,第二是闭包。而闭包又有两个传入参数,第一个是累积变量,第二个是原迭代器的迭代元素。通过闭包内的算法,最后返回累积变量经过这一次循环后应该具有的值。最终的返回值为迭代器运行结束后的累积变量。

rfold():fold的反方向遍历版本。

reduce():同fold,区别在于不需要给reduce()传递“初始值”这个参数,而直接以迭代器的第一个元素作为初始值。

scan():类似fold()方法,使用该方法需要传入两个参数,第一个是累积变量的初始值,第二是闭包。而闭包又有两个传入参数,第一个是累积变量,第二个是原迭代器的迭代元素。但与fold()不同的是,该方法每次迭代除了会操作积累变量外,还会返回一个Option。当返回Option为Some()时,会形成一个新的迭代器;当返回Option为None的时候,会直接结束迭代。换言之可以使用条件判断制定边界,方便地结束累计运算。同时由于返回值是迭代器,可以得到迭代计算值的整个序列。

all():将迭代元素传入闭包,在闭包内计算后返回一个布尔值。如果所有元素都返回True,则返回True。

any():将迭代元素传入闭包,在闭包内计算后返回一个布尔值。如果有任何一个元素返回True,则返回True。

partition():将迭代元素传入闭包,在闭包内计算后返回一个布尔值。对返回的布尔值为True还是False进行分类,最终将返回两个集合为分类结果分别为True和False的原元素集合。实现对容器的按条件划分。

zip():将另一个迭代器作为参数传入,可将两个迭代器打包为一个迭代器,迭代元素变为元组,每个元组元素包含原两个迭代器的该顺序迭代元素。

unzip():zip()的逆操作,将zip()过的迭代器,或由元组作为元素的迭代器,拆分成两个容器并以元组的形式返回。

by_ref():借用一个迭代器,以便遍历这个迭代器却不消耗它。

容器常用方法:

Vector:

push():压栈。

pop():弹栈。

capacity():返回Vector的元素数量。

clamp():用最大值与最小值,来约束一个限值区间。

dedup():删除连续的重复元素,只留下一个。若事先排序,可将重复元素都删除。

dedup_by():以闭包自定义比较函数,返回一个布尔值。如果是True,删除两个元素中第一个。以此来实现自定义函数的删除相邻元素。

dedup_by_key():定义一个闭包,返回一个可比较的值。删除返回值相同的相邻元素。

append():将另一个Vector添加到当前Vector后面,另一个Vector被清空。

concat():将多维向量展平。

join():将多维向量展平,以输入的参数作为分隔符。

first():第一个元素。

last():最后一个元素。

swap():交换Vector中两个下标的元素位置。

sort():排序。

sort_by():定义一个闭包作为比较函数并返回Ordering,以此实现自定义比较函数的排序。

sort_by_key():定义一个闭包返回一个可比较值,轮询元素传入闭包后根据返回值,进行排序。

sort_unstable():不稳定的排序方法(一种改进的快排)。一般而言具有较快的排序速度,但对于相同的元素,可能会改变其原本的顺序。

select_nth_unstable():对一个元素,返回其在Vector中的从小至大的顺序(排序完成后的序号;快排的单个元素实现)。

binary_search():二分查找。如果成功找到,返回Result::Ok,否则返回Result::Err。

binary_search_by():使用一个闭包定义比较函数并返回Ordering,以此实现自定义比较函数的二分查找。

binary_search_by_key():定义一个闭包返回一个可比较值,轮询元素传入闭包后根据返回值,进行二分查找。

partition_point():输入一个闭包,返回值而布尔类型,在Vector中以二分查找的方式,查找满足该条件和不满足该条件的分隔点,并返回下标值。

drain():删除指定range的元素,并将删除的元素以迭代器的形式返回。

truncate():删除超过len长度的元素。

starts_with():传入一个数组切片,判断Vector的开头若干位是否与传入的切片相同,返回一个布尔值。

ends_with():传入一个数组切片,判断Vector的末尾若干位是否与传入的切片相同,返回一个布尔值。

extend():传入一个迭代器,将迭代器中的元素逐个加入Vector中。

extend_from_slice():以数组切片填充至Vector末尾。

extend_from_within():将一个range中的元素填充至Vector末尾。

fill():用一个值填充满整个Vector。

fill_with():传入一个闭包,以闭包规则填充整个Vector。

insert():在指定下标位置插入一个元素。后面的元素全部往后移动一位。

remove():删除指定下标位置的元素。后面的元素全部往前移动一位。

resize():重新调整Vector的长度,调整后如果有更长的空间,用传入的value填充。

retain():传入一个闭包,返回类型为布尔型,只保留运算后为True的元素,其余的元素删除。

windows():传入一个窗口长度,返回一个迭代器,迭代器内元素是指定窗口长度的切片的Some包裹。若剩余元素小于窗口长度了,返回None。

BTreeMap:默认从小到大的B树。
BinaryHeap:二叉堆。默认大顶堆。
posted @ 2023-12-28 18:54  AbsalomT  阅读(291)  评论(0编辑  收藏  举报