Является ли это каноническим способом перебора набора значений? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть тип с перечисляемым набором значений:

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) }
    }
}

Действительно ли это канонический способсделай это?Что делать, если у нас есть несколько естественных порядков (например, перебирая перестановки или комбинации в порядке лекс / коллекс)?

1 Ответ

0 голосов
/ 06 июня 2018

Что, если у нас есть несколько естественных порядков (например, итерации по перестановкам или комбинациям в порядке лекс / коллекс)?

Реализация различных типов итераторов для разных порядков итераций.Вместо MyTypeIter вы можете использовать несколько типов итераторов, таких как MyTypePermutationIter и MyTypeCombinationIter.

. Стандартная библиотека использует этот подход во многих местах.Возьмем для примера строковый фрагмент типа str.Вы можете естественным образом перебирать байты строки, символы UTF-8 или строки (чтобы назвать несколько примеров).Для этой цели str предоставляет различные методы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...