我试图迭代分成块的切片,并返回一个包含每个块的第 n 个元素的元组。
例子:
&[1,2,3,4,5,6,7,8,9]
我想将其分成大小为 3 的块,然后迭代结果,返回这些元组,每个 next() 调用返回一个元组:
&mut[1,4,7], &mut[2,5,8], &mut[3,6,9]
我知道对于一般的东西,不可能返回可变的东西,这显然是不相交的,并且没有不安全的代码,我们可以拥有ChunksMut
(https://doc.rust-lang.org/std/slice/struct.ChunksMut .html)迭代器,所以也许有办法!。例如,我可以有 3 个ChunksMut
,然后编译器知道从它们返回的元素是不相交的。
这是我对非可变的尝试:
PS:我想避免每次迭代时使用 Vec 或任何分配
所以我总是返回对其内部切片的引用
该Iterator
特征不支持这一点,因为它的契约允许调用者提取多个值并使用所有它们。例如,Iterator
您的实现允许但不支持以下内容:
// take two values out of the iterator
let a = it.next().unwrap();
let b = it.next().unwrap();
Run Code Online (Sandbox Code Playgroud)
您需要的是一个“借出迭代器”(也称为“流式迭代器”),请参阅此 crate。一旦GAT 稳定,编写贷款迭代器将变得容易得多,但它们仍然不受std::iter::Iterator
.
使用该标准,Iterator
您可以通过使用ArrayVec
或等效替换来避免分配Vec
,如@Stargateur建议的那样。
归档时间: |
|
查看次数: |
1069 次 |
最近记录: |