gw_rust_programming_tutorial/chapter_13/
file_iterator.rs

1pub fn test_13_2() {
2    println!("====chapter 13.2");
3    iter_loop();
4    iterator_demonstration();
5    vec_map_to_new_iter();
6}
7
8fn iter_loop() {
9    let v1 = vec![1, 2, 3];
10
11    let v1_iter = v1.iter();
12
13    for val in v1_iter {
14        println!("Got: {}", val);
15    }
16}
17
18//Iterator trait 和 next 方法,返沪i迭代器当前值并将迭代器移动到下一个位置
19//所有权并返回拥有所有权的迭代器,则可以调用 into_iter 而不是 iter。类似的,如果我们希望迭代可变引用,则可以调用 iter_mut 而不是 iter。//
20//[#allow(nouse)]
21fn iterator_demonstration() {
22    let mut v1 = vec![1, 2, 3];
23
24    let mut v1_iter = v1.iter();
25
26    println!("vec={:?}",v1_iter.next());
27    println!("vec={:?}",v1_iter.next());
28    println!("vec={:?}",v1_iter.next());
29    println!("vec={:?}",v1_iter.next());
30
31    let it1 = v1.iter_mut();
32    let it1 = v1.into_iter();
33
34    let filters = search("a","ab\nac\n");
35    println!("find line={:?}",filters);
36}
37
38//调用迭代器适配器 map 来创建一个新迭代器
39fn vec_map_to_new_iter()
40{
41    let vecs = vec![1,2,3,4];
42    let it:Vec<_> = vecs.iter().map(|x|x+1).collect();
43
44    println!("new vec={:?}",it);
45}
46
47//闭包迭代器
48fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
49    contents.lines()
50        .filter(|line| line.contains(query))
51        .collect()
52}