3
我的問題是以下,但我想問題中標題中稍寬的問題。如何知道迭代器的當前位置?
我有一個Chars
類型的迭代器a
其他的一個字符串。假設我在閱讀字符串時發現錯誤,並且想打印一條錯誤消息。這個消息應該提到錯誤在字符串中的位置(行號等)Rust標準庫中是否有任何方法可以幫助我?
我的問題是以下,但我想問題中標題中稍寬的問題。如何知道迭代器的當前位置?
我有一個Chars
類型的迭代器a
其他的一個字符串。假設我在閱讀字符串時發現錯誤,並且想打印一條錯誤消息。這個消息應該提到錯誤在字符串中的位置(行號等)Rust標準庫中是否有任何方法可以幫助我?
您可以使用Iterator::enumerate()
。
這裏是適合您的使用情況的一個例子:
fn one_indexed<T>((n, x): (usize, T)) -> (usize, T) {
(n+1, x)
}
fn main() {
let s = "abc def\nghi jkl";
for (line_n, line) in s.lines().enumerate().map(one_indexed) {
for (char_n, char) in line.chars().enumerate().map(one_indexed) {
println!("character {} at {}:{}", char, line_n, char_n);
}
}
}
此打印:
character a at 1:1
character b at 1:2
character c at 1:3
character at 1:4
character d at 1:5
character e at 1:6
character f at 1:7
character g at 2:1
character h at 2:2
character i at 2:3
character at 2:4
character j at 2:5
character k at 2:6
character l at 2:7
這只是解決方案的一部分,當然,因爲那麼你需要映射你的位置從'enumerate'以人類可讀的方式從行/列。儘管如此,我認爲這種方法優於跟蹤線/列,因爲「快樂路徑」不支付更新這些變量的維護成本。 –