2015-05-26 42 views
3

我的問題是以下,但我想問題中標題中稍寬的問題。如何知道迭代器的當前位置?

我有一個Chars類型的迭代器a其他的一個字符串。假設我在閱讀字符串時發現錯誤,並且想打印一條錯誤消息。這個消息應該提到錯誤在字符串中的位置(行號等)Rust標準庫中是否有任何方法可以幫助我?

回答

5

您可以使用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 
+0

這只是解決方案的一部分,當然,因爲那麼你需要映射你的位置從'enumerate'以人類可讀的方式從行/列。儘管如此,我認爲這種方法優於跟蹤線/列,因爲「快樂路徑」不支付更新這些變量的維護成本。 –

相關問題