跳转至

std.iter

tier: alloc · since: std-0.6 stability: experimental

迭代器适配器链(§3.8.2/§4.8 UFCS;T16 收口 + 续波 R-P3b 面) 形态:Seq[T, S] trait(get 基惰性适配器)+ UFCS 自由函数入口(数组接收者)。 get(i) = 纯位置读取(无内部状态推进),链任意深度组合;终结器(sum/collect/ count/any/all/fold/reduce/foreach/min/max/last/position)索引驱动逐元素拉取, 零中间集合。数组另有快路径直终结入口。 续波(2026-10-03,R-P3b 承诺面收口):适配器补 skip/take_while/rev/enumerate/ zip/chain;终结子补 fold/reduce/foreach/min/max/last/position;Pair[F,G] 载 enumerate/zip 元组位;ListSeq[T] 接入 List(前奏 class 直 impl trait 派发不挂, 探针实证——包装 struct 同 RawSeq 形,from_list 入口)。 v0 语义注记:next 基适配器在 var-self 写回语义落库前不可组合(interp 逐调用 拷贝接收者,p12 实证);自定义 Iterator 经 for-重放 get(03k 语义)接入同一面。 zip/chain 为同型 S 面(other 与 self 同适配器型):数组入口双侧同包 RawSeq 故 xs.zip(ys)/xs.chain(ys) 直用;异型两侧(如 map 后 zip 裸数组)登记后续。 rev/chain 的 get 为无状态重扫(O(n) 每次,总量 O(n·m)):正确性优先,缓存化 待有状态接收语义(var-self 写回)落库后评估。 min/max 与 std/math 的二元 min/max 同名不同签:use 显式导入制下同导两名才 E5030;方法调用形(xs.max())不走自由函数命名空间,无冲突。 发射面:trait 方法调用与 for-over-Iterator 发射在册(T25 v2 域),本面按 03k 先例以双 interp 口径入主套件。

trait

trait Seq

fn get(var self, i: I64) -> T?
fn map(var self, f: fn(T) -> T) -> MapSeq[T, S]
fn filter(var self, p: fn(T) -> Bool) -> FilterSeq[T, S]
fn take(var self, k: I64) -> TakeSeq[T, S]
fn skip(var self, n: I64) -> SkipSeq[T, S]
fn take_while(var self, p: fn(T) -> Bool) -> TakeWhileSeq[T, S]
fn rev(var self) -> RevSeq[T, S]
fn enumerate(var self) -> EnumSeq[T, S]
fn zip(var self, other: S) -> ZipSeq[T, S]
fn chain(var self, other: S) -> ChainSeq[T, S]
fn sum(var self) -> I64
fn count(var self) -> I64
fn collect(var self) -> List[T]
fn any(var self, p: fn(T) -> Bool) -> Bool
fn all(var self, p: fn(T) -> Bool) -> Bool
fn fold(var self, init: I64, f: fn(I64, T) -> I64) -> I64
fn reduce(var self, f: fn(T, T) -> T) -> T?
fn foreach(var self, f: fn(T)) -> I64
fn min(var self) -> T?
fn max(var self) -> T?
fn last(var self) -> T?
fn position(var self, p: fn(T) -> Bool) -> I64?

impl

impl Seq[T, RawSeq[S, T]] for RawSeq[S, T]
    fn get(var self, i: I64) -> T?
impl Seq[T, ListSeq[T]] for ListSeq[T]
    fn get(var self, i: I64) -> T?
impl Seq[T, MapSeq[T, S]] for MapSeq[T, S]
    fn get(var self, i: I64) -> T?
impl Seq[T, FilterSeq[T, S]] for FilterSeq[T, S]
    fn get(var self, i: I64) -> T?
impl Seq[T, TakeSeq[T, S]] for TakeSeq[T, S]
    fn get(var self, i: I64) -> T?
impl Seq[T, SkipSeq[T, S]] for SkipSeq[T, S]
    fn get(var self, i: I64) -> T?
impl Seq[T, TakeWhileSeq[T, S]] for TakeWhileSeq[T, S]
    fn get(var self, i: I64) -> T?
impl Seq[T, RevSeq[T, S]] for RevSeq[T, S]
    fn get(var self, i: I64) -> T?
impl Seq[T, EnumSeq[T, S]] for EnumSeq[T, S]
    fn get(var self, i: I64) -> Pair[I64, T]?
impl Seq[T, ZipSeq[T, S]] for ZipSeq[T, S]
    fn get(var self, i: I64) -> Pair[T, T]?
impl Seq[T, ChainSeq[T, S]] for ChainSeq[T, S]
    fn get(var self, i: I64) -> T?

pub fn

Signature Returns Description
map(xs: [I32], f: fn(I32) -> I32) MapSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.map(f)(UFCS 接收者填首参;包 RawSeq 成 MapSeq)
filter(xs: [I32], p: fn(I32) -> Bool) FilterSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.filter(p)
take(xs: [I32], k: I64) TakeSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.take(k) 截前 k 个
skip(xs: [I32], n: I64) SkipSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.skip(n) 跳前 n 个
take_while(xs: [I32], p: fn(I32) -> Bool) TakeWhileSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.take_while(p) 取前缀直遇首败
rev(xs: [I32]) RevSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.rev() 反转视图(无状态重扫)
enumerate(xs: [I32]) EnumSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.enumerate() → Pair[I64, T] 序列
zip(xs: [I32], ys: [I32]) ZipSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.zip(ys) 同型拉链(短者截断)
chain(xs: [I32], ys: [I32]) ChainSeq[I32, RawSeq[[I32], I32]] 数组入口:xs.chain(ys) 同型串接
from_list(xs: List[I32]) ListSeq[I32] List 入口:iter.from_list(xs)(前奏 class 直 impl 派发不挂,包装 struct 接入)
sum(xs: [I32]) I64 数组直终结快路径:I64 累加(零包装索引循环)
count(xs: [I32]) I64 数组直终结:len 直返
collect(xs: [I32]) List[I32] 数组直终结:转 List[I32]
any(xs: [I32], p: fn(I32) -> Bool) Bool 数组直终结:短路存在判定
all(xs: [I32], p: fn(I32) -> Bool) Bool 数组直终结:短路全称判定
fold(xs: [I32], init: I64, f: fn(I64, I32) -> I64) I64 数组直终结:I64 折叠(init 起,逐元素左折叠)
reduce(xs: [I32], f: fn(I32, I32) -> I32) I32? 数组直终结:同型归并;空数组 None
foreach(xs: [I32], f: fn(I32)) I64 数组直终结:逐元素执行 f,返回处理数
min(xs: [I32]) I32? 数组直终结:最小值;空数组 None
max(xs: [I32]) I32? 数组直终结:最大值;空数组 None
last(xs: [I32]) I32? 数组直终结:末元素;空数组 None
position(xs: [I32], p: fn(I32) -> Bool) I64? 数组直终结:首个满足 p 的下标;无则 None
parallel_map(xs: List[I32], f: fn(I32) -> I32) List[I32] 前奏 parallel.map 薄包装(§7.7 归位;前奏直用 parallel 过渡兼容)
parallel_reduce(xs: List[I32], init: I32, f: fn(I32, I32) -> I32) I32 前奏 parallel.reduce 薄包装(init 起 I32 归并;过渡兼容同上)