Iterator 这是迭代一组值的标准方法吗?
我有一个具有可枚举值集的类型:Iterator 这是迭代一组值的标准方法吗?,iterator,rust,Iterator,Rust,我有一个具有可枚举值集的类型: struct MyType(u32); struct MyTypeIter { m: MyType, } impl Iterator for MyTypeIter { type Item = MyType; fn next(&mut self) -> Option<Self::Item> { if (self.m).0 < 0xffffffff { (self.m).
struct MyType(u32);
struct MyTypeIter {
m: MyType,
}
impl Iterator for MyTypeIter {
type Item = MyType;
fn next(&mut self) -> Option<Self::Item> {
if (self.m).0 < 0xffffffff {
(self.m).0 += 1;
Some(MyType((self.m).0 - 1))
} else {
None
}
}
}
impl MyTypeIter {
fn new() -> MyTypeIter {
MyTypeIter { m: MyType(0) }
}
}
我可以在一组值上定义迭代器:
struct MyType(u32);
struct MyTypeIter {
m: MyType,
}
impl Iterator for MyTypeIter {
type Item = MyType;
fn next(&mut self) -> Option<Self::Item> {
if (self.m).0 < 0xffffffff {
(self.m).0 += 1;
Some(MyType((self.m).0 - 1))
} else {
None
}
}
}
impl MyTypeIter {
fn new() -> MyTypeIter {
MyTypeIter { m: MyType(0) }
}
}
struct MyTypeIter{
m:MyType,
}
MyTypeIter的impl迭代器{
类型项=MyType;
fn下一步(&mut self)->选项{
if(self.m).0<0xffffffff{
(self.m).0+=1;
一些(MyType((self.m.0-1))
}否则{
没有一个
}
}
}
impl-MyTypeIter{
fn new()->MyTypeIter{
MyTypeIter{m:MyType(0)}
}
}
这真的是一种规范的方式吗?如果我们有几个自然顺序(比如在lex/colex顺序中迭代排列或组合),该怎么办
如果我们有几个自然顺序(比如在lex/colex顺序中迭代排列或组合),该怎么办
为不同的迭代顺序实现不同的迭代器类型。您可以使用多个迭代器类型,而不是MyTypeIter
,例如MyTypePermutationIter
和MyTypeCombinationIter
标准库在许多地方采用这种方法。以字符串切片类型为例。您可以自然地迭代字符串的字节、UTF-8字符或行(举几个例子)。为此,str
公开了不同的方法:
- 返回迭代器
- 返回迭代器
- 返回迭代器
MyTypeIter
永远不会产生值MyType(0)
。请注意,我正在减去1。无论如何,这不是真正的代码,只是一个过于简单的示例。好吧,所以它永远不会产生MyType(u32::max\u value())
。简化的例子很好,我只是不想让你不知道这个bug。哦,是的,我现在明白了。非常感谢。