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_unstable():不稳定的排序方法(一种改进的快排)。一般而言具有较快的排序速度,但对于相同的元素,可能会改变其原本的顺序。
binary_search():二分查找。如果成功找到,返回Result::Ok,否则返回Result::Err。
binary_search_by():使用一个闭包定义比较函数并返回Ordering,以此实现自定义比较函数的二分查找。
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。