[{"data":1,"prerenderedAt":3753},["ShallowReactive",2],{"page-\u002Frust\u002F15-iterators":3},{"id":4,"title":5,"body":6,"description":3746,"extension":3747,"meta":3748,"navigation":2280,"path":3749,"seo":3750,"stem":3751,"__hash__":3752},"content\u002Frust\u002F15-iterators.md","15 — Iterators & Combinators",{"type":7,"value":8,"toc":3714},"minimark",[9,13,26,36,136,156,160,279,293,299,308,363,380,384,440,444,913,917,1368,1372,1857,1866,2071,2083,2090,2340,2344,2458,2464,2470,2479,2525,2532,2538,2544,2548,2648,2661,2665,2762,2771,2776,2791,2857,2862,2865,2968,2972,3138,3142,3147,3238,3242,3276,3280,3350,3354,3433,3437,3504,3508,3551,3555,3692,3696,3707,3710],[10,11,5],"h1",{"id":12},"_15-iterators-combinators",[14,15,16,17,21,22,25],"p",{},"Rust's iterators are ",[18,19,20],"strong",{},"lazy",", ",[18,23,24],{},"zero-cost",", and compose into chains that compile down to tight loops. Mastering them is the difference between \"writing Rust\" and \"writing idiomatic Rust\".",[27,28,30,31,35],"h2",{"id":29},"the-iterator-trait","The ",[32,33,34],"code",{},"Iterator"," Trait",[37,38,40],"code-wrapper",{"language":39},"rust",[41,42,46],"pre",{"className":43,"code":44,"language":39,"meta":45,"style":45},"language-rust shiki shiki-themes github-light github-dark","pub trait Iterator {\n    type Item;\n    fn next(&mut self) -> Option\u003CSelf::Item>;\n    \u002F\u002F ... dozens of provided methods\n}\n","",[32,47,48,68,80,123,130],{"__ignoreMap":45},[49,50,53,57,60,64],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"svdQ7","pub",[49,58,59],{"class":55}," trait",[49,61,63],{"class":62},"sIsaT"," Iterator",[49,65,67],{"class":66},"ssxIu"," {\n",[49,69,71,74,77],{"class":51,"line":70},2,[49,72,73],{"class":55},"    type",[49,75,76],{"class":62}," Item",[49,78,79],{"class":66},";\n",[49,81,83,86,89,92,95,99,102,105,108,111,114,117,120],{"class":51,"line":82},3,[49,84,85],{"class":55},"    fn",[49,87,88],{"class":62}," next",[49,90,91],{"class":66},"(",[49,93,94],{"class":55},"&mut",[49,96,98],{"class":97},"snvgF"," self",[49,100,101],{"class":66},") ",[49,103,104],{"class":55},"->",[49,106,107],{"class":62}," Option",[49,109,110],{"class":66},"\u003C",[49,112,113],{"class":97},"Self",[49,115,116],{"class":55},"::",[49,118,119],{"class":62},"Item",[49,121,122],{"class":66},">;\n",[49,124,126],{"class":51,"line":125},4,[49,127,129],{"class":128},"sdCPZ","    \u002F\u002F ... dozens of provided methods\n",[49,131,133],{"class":51,"line":132},5,[49,134,135],{"class":66},"}\n",[14,137,138,139,142,143,21,146,21,149,21,152,155],{},"Implement ",[32,140,141],{},"next()"," and you get ",[32,144,145],{},"map",[32,147,148],{},"filter",[32,150,151],{},"fold",[32,153,154],{},"collect",", etc. for free.",[27,157,159],{"id":158},"laziness","Laziness",[37,161,162],{"language":39},[41,163,165],{"className":43,"code":164,"language":39,"meta":45,"style":45},"let v = vec![1, 2, 3];\nlet it = v.iter().map(|x| x * 2);   \u002F\u002F no work yet\nfor y in it { println!(\"{y}\"); }    \u002F\u002F work happens here\n",[32,166,167,200,250],{"__ignoreMap":45},[49,168,169,172,175,178,181,184,187,189,192,194,197],{"class":51,"line":52},[49,170,171],{"class":55},"let",[49,173,174],{"class":66}," v ",[49,176,177],{"class":55},"=",[49,179,180],{"class":62}," vec!",[49,182,183],{"class":66},"[",[49,185,186],{"class":97},"1",[49,188,21],{"class":66},[49,190,191],{"class":97},"2",[49,193,21],{"class":66},[49,195,196],{"class":97},"3",[49,198,199],{"class":66},"];\n",[49,201,202,204,207,209,212,215,218,221,223,225,227,230,233,235,238,241,244,247],{"class":51,"line":70},[49,203,171],{"class":55},[49,205,206],{"class":66}," it ",[49,208,177],{"class":55},[49,210,211],{"class":66}," v",[49,213,214],{"class":55},".",[49,216,217],{"class":62},"iter",[49,219,220],{"class":66},"()",[49,222,214],{"class":55},[49,224,145],{"class":62},[49,226,91],{"class":66},[49,228,229],{"class":55},"|",[49,231,232],{"class":66},"x",[49,234,229],{"class":55},[49,236,237],{"class":66}," x ",[49,239,240],{"class":55},"*",[49,242,243],{"class":97}," 2",[49,245,246],{"class":66},");   ",[49,248,249],{"class":128},"\u002F\u002F no work yet\n",[49,251,252,255,258,261,264,267,269,273,276],{"class":51,"line":82},[49,253,254],{"class":55},"for",[49,256,257],{"class":66}," y ",[49,259,260],{"class":55},"in",[49,262,263],{"class":66}," it { ",[49,265,266],{"class":62},"println!",[49,268,91],{"class":66},[49,270,272],{"class":271},"sJ6F3","\"{y}\"",[49,274,275],{"class":66},"); }    ",[49,277,278],{"class":128},"\u002F\u002F work happens here\n",[14,280,281,282,21,284,21,286,21,289,292],{},"Iterator chains don't run until consumed (by ",[32,283,254],{},[32,285,154],{},[32,287,288],{},"sum",[32,290,291],{},"count",", etc.).",[27,294,296],{"id":295},"intoiterator",[32,297,298],{},"IntoIterator",[14,300,301,302,304,305,307],{},"Anything implementing ",[32,303,298],{}," can be used in ",[32,306,254],{},":",[37,309,310],{"language":39},[41,311,313],{"className":43,"code":312,"language":39,"meta":45,"style":45},"for x in &vec { }       \u002F\u002F &Vec\u003CT>  -> Iterator\u003CItem = &T>\nfor x in &mut vec { }  \u002F\u002F &mut Vec\u003CT> -> Iterator\u003CItem = &mut T>\nfor x in vec { }        \u002F\u002F Vec\u003CT> -> consumes, yields T\n",[32,314,315,332,349],{"__ignoreMap":45},[49,316,317,319,321,323,326,329],{"class":51,"line":52},[49,318,254],{"class":55},[49,320,237],{"class":66},[49,322,260],{"class":55},[49,324,325],{"class":55}," &",[49,327,328],{"class":66},"vec { }       ",[49,330,331],{"class":128},"\u002F\u002F &Vec\u003CT>  -> Iterator\u003CItem = &T>\n",[49,333,334,336,338,340,343,346],{"class":51,"line":70},[49,335,254],{"class":55},[49,337,237],{"class":66},[49,339,260],{"class":55},[49,341,342],{"class":55}," &mut",[49,344,345],{"class":66}," vec { }  ",[49,347,348],{"class":128},"\u002F\u002F &mut Vec\u003CT> -> Iterator\u003CItem = &mut T>\n",[49,350,351,353,355,357,360],{"class":51,"line":82},[49,352,254],{"class":55},[49,354,237],{"class":66},[49,356,260],{"class":55},[49,358,359],{"class":66}," vec { }        ",[49,361,362],{"class":128},"\u002F\u002F Vec\u003CT> -> consumes, yields T\n",[14,364,365,368,369,372,373,376,377,214],{},[32,366,367],{},"Vec\u003CT>: IntoIterator\u003CItem = T>"," since edition 2021. Pre-2021, arrays only borrowed-by-default — ",[32,370,371],{},"for x in [1,2,3]"," errored unless you wrote ",[32,374,375],{},"for x in &[1,2,3]"," or ",[32,378,379],{},"into_iter()",[27,381,383],{"id":382},"consuming-vs-borrowing-iterators","Consuming vs Borrowing Iterators",[385,386,387,400],"table",{},[388,389,390],"thead",{},[391,392,393,397],"tr",{},[394,395,396],"th",{},"Method",[394,398,399],{},"Yields",[401,402,403,416,428],"tbody",{},[391,404,405,411],{},[406,407,408],"td",{},[32,409,410],{},"iter()",[406,412,413],{},[32,414,415],{},"&T",[391,417,418,423],{},[406,419,420],{},[32,421,422],{},"iter_mut()",[406,424,425],{},[32,426,427],{},"&mut T",[391,429,430,434],{},[406,431,432],{},[32,433,379],{},[406,435,436,439],{},[32,437,438],{},"T"," (consumes the collection)",[27,441,443],{"id":442},"common-adapters-producers","Common Adapters (Producers)",[37,445,446],{"language":39},[41,447,449],{"className":43,"code":448,"language":39,"meta":45,"style":45},"0..10                       \u002F\u002F Range\n(1..=5).rev()\n\"abc\".chars()\n\"abc\".bytes()\nvec.iter()\nvec.iter_mut()\nvec.into_iter()\nslice.chunks(3)\nslice.chunks_exact(3)\nslice.rchunks(3)\nslice.windows(2)             \u002F\u002F sliding window, overlapping\nslice.split(|c| *c == b',')\nslice.splitn(3, |c| *c == b',')\nstr.lines()\nstr.split_whitespace()\nstr.split_ascii_whitespace()\nstd::iter::repeat(5)         \u002F\u002F infinite\nstd::iter::repeat_with(|| rand::random())\nstd::iter::once(5)\nstd::iter::empty::\u003Ci32>()\nstd::iter::successors(Some(1), |n| Some(n * 2))   \u002F\u002F unfold\nstd::iter::from_fn(|| Some(1))\nstd::iter::zip(a, b)         \u002F\u002F zip two iterables\n",[32,450,451,465,488,500,511,522,534,546,564,580,596,616,649,681,694,706,718,743,773,793,817,866,893],{"__ignoreMap":45},[49,452,453,456,459,462],{"class":51,"line":52},[49,454,455],{"class":97},"0",[49,457,458],{"class":55},"..",[49,460,461],{"class":97},"10",[49,463,464],{"class":128},"                       \u002F\u002F Range\n",[49,466,467,469,471,474,477,480,482,485],{"class":51,"line":70},[49,468,91],{"class":66},[49,470,186],{"class":97},[49,472,473],{"class":55},"..=",[49,475,476],{"class":97},"5",[49,478,479],{"class":66},")",[49,481,214],{"class":55},[49,483,484],{"class":62},"rev",[49,486,487],{"class":66},"()\n",[49,489,490,493,495,498],{"class":51,"line":82},[49,491,492],{"class":271},"\"abc\"",[49,494,214],{"class":55},[49,496,497],{"class":62},"chars",[49,499,487],{"class":66},[49,501,502,504,506,509],{"class":51,"line":125},[49,503,492],{"class":271},[49,505,214],{"class":55},[49,507,508],{"class":62},"bytes",[49,510,487],{"class":66},[49,512,513,516,518,520],{"class":51,"line":132},[49,514,515],{"class":66},"vec",[49,517,214],{"class":55},[49,519,217],{"class":62},[49,521,487],{"class":66},[49,523,525,527,529,532],{"class":51,"line":524},6,[49,526,515],{"class":66},[49,528,214],{"class":55},[49,530,531],{"class":62},"iter_mut",[49,533,487],{"class":66},[49,535,537,539,541,544],{"class":51,"line":536},7,[49,538,515],{"class":66},[49,540,214],{"class":55},[49,542,543],{"class":62},"into_iter",[49,545,487],{"class":66},[49,547,549,552,554,557,559,561],{"class":51,"line":548},8,[49,550,551],{"class":66},"slice",[49,553,214],{"class":55},[49,555,556],{"class":62},"chunks",[49,558,91],{"class":66},[49,560,196],{"class":97},[49,562,563],{"class":66},")\n",[49,565,567,569,571,574,576,578],{"class":51,"line":566},9,[49,568,551],{"class":66},[49,570,214],{"class":55},[49,572,573],{"class":62},"chunks_exact",[49,575,91],{"class":66},[49,577,196],{"class":97},[49,579,563],{"class":66},[49,581,583,585,587,590,592,594],{"class":51,"line":582},10,[49,584,551],{"class":66},[49,586,214],{"class":55},[49,588,589],{"class":62},"rchunks",[49,591,91],{"class":66},[49,593,196],{"class":97},[49,595,563],{"class":66},[49,597,599,601,603,606,608,610,613],{"class":51,"line":598},11,[49,600,551],{"class":66},[49,602,214],{"class":55},[49,604,605],{"class":62},"windows",[49,607,91],{"class":66},[49,609,191],{"class":97},[49,611,612],{"class":66},")             ",[49,614,615],{"class":128},"\u002F\u002F sliding window, overlapping\n",[49,617,619,621,623,626,628,630,633,635,638,641,644,647],{"class":51,"line":618},12,[49,620,551],{"class":66},[49,622,214],{"class":55},[49,624,625],{"class":62},"split",[49,627,91],{"class":66},[49,629,229],{"class":55},[49,631,632],{"class":66},"c",[49,634,229],{"class":55},[49,636,637],{"class":55}," *",[49,639,640],{"class":66},"c ",[49,642,643],{"class":55},"==",[49,645,646],{"class":271}," b','",[49,648,563],{"class":66},[49,650,652,654,656,659,661,663,665,667,669,671,673,675,677,679],{"class":51,"line":651},13,[49,653,551],{"class":66},[49,655,214],{"class":55},[49,657,658],{"class":62},"splitn",[49,660,91],{"class":66},[49,662,196],{"class":97},[49,664,21],{"class":66},[49,666,229],{"class":55},[49,668,632],{"class":66},[49,670,229],{"class":55},[49,672,637],{"class":55},[49,674,640],{"class":66},[49,676,643],{"class":55},[49,678,646],{"class":271},[49,680,563],{"class":66},[49,682,684,687,689,692],{"class":51,"line":683},14,[49,685,686],{"class":62},"str",[49,688,214],{"class":55},[49,690,691],{"class":62},"lines",[49,693,487],{"class":66},[49,695,697,699,701,704],{"class":51,"line":696},15,[49,698,686],{"class":62},[49,700,214],{"class":55},[49,702,703],{"class":62},"split_whitespace",[49,705,487],{"class":66},[49,707,709,711,713,716],{"class":51,"line":708},16,[49,710,686],{"class":62},[49,712,214],{"class":55},[49,714,715],{"class":62},"split_ascii_whitespace",[49,717,487],{"class":66},[49,719,721,724,726,728,730,733,735,737,740],{"class":51,"line":720},17,[49,722,723],{"class":62},"std",[49,725,116],{"class":55},[49,727,217],{"class":62},[49,729,116],{"class":55},[49,731,732],{"class":62},"repeat",[49,734,91],{"class":66},[49,736,476],{"class":97},[49,738,739],{"class":66},")         ",[49,741,742],{"class":128},"\u002F\u002F infinite\n",[49,744,746,748,750,752,754,757,759,762,765,767,770],{"class":51,"line":745},18,[49,747,723],{"class":62},[49,749,116],{"class":55},[49,751,217],{"class":62},[49,753,116],{"class":55},[49,755,756],{"class":62},"repeat_with",[49,758,91],{"class":66},[49,760,761],{"class":55},"||",[49,763,764],{"class":62}," rand",[49,766,116],{"class":55},[49,768,769],{"class":62},"random",[49,771,772],{"class":66},"())\n",[49,774,776,778,780,782,784,787,789,791],{"class":51,"line":775},19,[49,777,723],{"class":62},[49,779,116],{"class":55},[49,781,217],{"class":62},[49,783,116],{"class":55},[49,785,786],{"class":62},"once",[49,788,91],{"class":66},[49,790,476],{"class":97},[49,792,563],{"class":66},[49,794,796,798,800,802,804,807,809,811,814],{"class":51,"line":795},20,[49,797,723],{"class":62},[49,799,116],{"class":55},[49,801,217],{"class":62},[49,803,116],{"class":55},[49,805,806],{"class":62},"empty",[49,808,116],{"class":55},[49,810,110],{"class":66},[49,812,813],{"class":62},"i32",[49,815,816],{"class":66},">()\n",[49,818,820,822,824,826,828,831,833,836,838,840,843,845,848,850,853,856,858,860,863],{"class":51,"line":819},21,[49,821,723],{"class":62},[49,823,116],{"class":55},[49,825,217],{"class":62},[49,827,116],{"class":55},[49,829,830],{"class":62},"successors",[49,832,91],{"class":66},[49,834,835],{"class":62},"Some",[49,837,91],{"class":66},[49,839,186],{"class":97},[49,841,842],{"class":66},"), ",[49,844,229],{"class":55},[49,846,847],{"class":66},"n",[49,849,229],{"class":55},[49,851,852],{"class":62}," Some",[49,854,855],{"class":66},"(n ",[49,857,240],{"class":55},[49,859,243],{"class":97},[49,861,862],{"class":66},"))   ",[49,864,865],{"class":128},"\u002F\u002F unfold\n",[49,867,869,871,873,875,877,880,882,884,886,888,890],{"class":51,"line":868},22,[49,870,723],{"class":62},[49,872,116],{"class":55},[49,874,217],{"class":62},[49,876,116],{"class":55},[49,878,879],{"class":62},"from_fn",[49,881,91],{"class":66},[49,883,761],{"class":55},[49,885,852],{"class":62},[49,887,91],{"class":66},[49,889,186],{"class":97},[49,891,892],{"class":66},"))\n",[49,894,896,898,900,902,904,907,910],{"class":51,"line":895},23,[49,897,723],{"class":62},[49,899,116],{"class":55},[49,901,217],{"class":62},[49,903,116],{"class":55},[49,905,906],{"class":62},"zip",[49,908,909],{"class":66},"(a, b)         ",[49,911,912],{"class":128},"\u002F\u002F zip two iterables\n",[27,914,916],{"id":915},"common-transformers","Common Transformers",[37,918,919],{"language":39},[41,920,922],{"className":43,"code":921,"language":39,"meta":45,"style":45},"it.map(|x| x * 2)\nit.filter(|x| *x > 0)\nit.filter_map(|x| if *x > 0 { Some(*x) } else { None })\nit.enumerate()               \u002F\u002F (index, item)\nit.zip(other_iter)           \u002F\u002F pair up\nit.flat_map(|x| x.iter())     \u002F\u002F flatten one level\nit.flatten()                  \u002F\u002F for Iterator\u003CItem = Iterator>\nit.take(3)                    \u002F\u002F first 3\nit.skip(3)\nit.take_while(|x| *x \u003C 10)\nit.skip_while(|x| *x \u003C 10)\nit.step_by(2)\nit.chain(other)\nit.rev()                       \u002F\u002F requires DoubleEndedIterator\nit.peekable()                  \u002F\u002F Peekable — see next without consuming\nit.cycle()                     \u002F\u002F infinite repeat (Clone-able items)\nit.scan(init, |state, x| ...)  \u002F\u002F stateful map, returns Option\nit.dedup()\nit.unzip()                     \u002F\u002F (Vec\u003CA>, Vec\u003CB>)\nit.collect()\nit.copied()                    \u002F\u002F Iterator\u003CItem=&T where T:Copy> -> Item=T\nit.cloned()                    \u002F\u002F Iterator\u003CItem=&T> -> Item=T (T: Clone)\nit.by_ref()                    \u002F\u002F borrow iterator for partial consumption\n",[32,923,924,949,978,1029,1044,1058,1088,1103,1122,1137,1165,1192,1207,1219,1233,1247,1262,1290,1301,1315,1325,1340,1354],{"__ignoreMap":45},[49,925,926,929,931,933,935,937,939,941,943,945,947],{"class":51,"line":52},[49,927,928],{"class":66},"it",[49,930,214],{"class":55},[49,932,145],{"class":62},[49,934,91],{"class":66},[49,936,229],{"class":55},[49,938,232],{"class":66},[49,940,229],{"class":55},[49,942,237],{"class":66},[49,944,240],{"class":55},[49,946,243],{"class":97},[49,948,563],{"class":66},[49,950,951,953,955,957,959,961,963,965,967,970,973,976],{"class":51,"line":70},[49,952,928],{"class":66},[49,954,214],{"class":55},[49,956,148],{"class":62},[49,958,91],{"class":66},[49,960,229],{"class":55},[49,962,232],{"class":66},[49,964,229],{"class":55},[49,966,637],{"class":55},[49,968,969],{"class":66},"x ",[49,971,972],{"class":55},">",[49,974,975],{"class":97}," 0",[49,977,563],{"class":66},[49,979,980,982,984,987,989,991,993,995,998,1000,1002,1004,1006,1009,1011,1013,1015,1018,1021,1023,1026],{"class":51,"line":82},[49,981,928],{"class":66},[49,983,214],{"class":55},[49,985,986],{"class":62},"filter_map",[49,988,91],{"class":66},[49,990,229],{"class":55},[49,992,232],{"class":66},[49,994,229],{"class":55},[49,996,997],{"class":55}," if",[49,999,637],{"class":55},[49,1001,969],{"class":66},[49,1003,972],{"class":55},[49,1005,975],{"class":97},[49,1007,1008],{"class":66}," { ",[49,1010,835],{"class":62},[49,1012,91],{"class":66},[49,1014,240],{"class":55},[49,1016,1017],{"class":66},"x) } ",[49,1019,1020],{"class":55},"else",[49,1022,1008],{"class":66},[49,1024,1025],{"class":62},"None",[49,1027,1028],{"class":66}," })\n",[49,1030,1031,1033,1035,1038,1041],{"class":51,"line":125},[49,1032,928],{"class":66},[49,1034,214],{"class":55},[49,1036,1037],{"class":62},"enumerate",[49,1039,1040],{"class":66},"()               ",[49,1042,1043],{"class":128},"\u002F\u002F (index, item)\n",[49,1045,1046,1048,1050,1052,1055],{"class":51,"line":132},[49,1047,928],{"class":66},[49,1049,214],{"class":55},[49,1051,906],{"class":62},[49,1053,1054],{"class":66},"(other_iter)           ",[49,1056,1057],{"class":128},"\u002F\u002F pair up\n",[49,1059,1060,1062,1064,1067,1069,1071,1073,1075,1078,1080,1082,1085],{"class":51,"line":524},[49,1061,928],{"class":66},[49,1063,214],{"class":55},[49,1065,1066],{"class":62},"flat_map",[49,1068,91],{"class":66},[49,1070,229],{"class":55},[49,1072,232],{"class":66},[49,1074,229],{"class":55},[49,1076,1077],{"class":66}," x",[49,1079,214],{"class":55},[49,1081,217],{"class":62},[49,1083,1084],{"class":66},"())     ",[49,1086,1087],{"class":128},"\u002F\u002F flatten one level\n",[49,1089,1090,1092,1094,1097,1100],{"class":51,"line":536},[49,1091,928],{"class":66},[49,1093,214],{"class":55},[49,1095,1096],{"class":62},"flatten",[49,1098,1099],{"class":66},"()                  ",[49,1101,1102],{"class":128},"\u002F\u002F for Iterator\u003CItem = Iterator>\n",[49,1104,1105,1107,1109,1112,1114,1116,1119],{"class":51,"line":548},[49,1106,928],{"class":66},[49,1108,214],{"class":55},[49,1110,1111],{"class":62},"take",[49,1113,91],{"class":66},[49,1115,196],{"class":97},[49,1117,1118],{"class":66},")                    ",[49,1120,1121],{"class":128},"\u002F\u002F first 3\n",[49,1123,1124,1126,1128,1131,1133,1135],{"class":51,"line":566},[49,1125,928],{"class":66},[49,1127,214],{"class":55},[49,1129,1130],{"class":62},"skip",[49,1132,91],{"class":66},[49,1134,196],{"class":97},[49,1136,563],{"class":66},[49,1138,1139,1141,1143,1146,1148,1150,1152,1154,1156,1158,1160,1163],{"class":51,"line":582},[49,1140,928],{"class":66},[49,1142,214],{"class":55},[49,1144,1145],{"class":62},"take_while",[49,1147,91],{"class":66},[49,1149,229],{"class":55},[49,1151,232],{"class":66},[49,1153,229],{"class":55},[49,1155,637],{"class":55},[49,1157,969],{"class":66},[49,1159,110],{"class":55},[49,1161,1162],{"class":97}," 10",[49,1164,563],{"class":66},[49,1166,1167,1169,1171,1174,1176,1178,1180,1182,1184,1186,1188,1190],{"class":51,"line":598},[49,1168,928],{"class":66},[49,1170,214],{"class":55},[49,1172,1173],{"class":62},"skip_while",[49,1175,91],{"class":66},[49,1177,229],{"class":55},[49,1179,232],{"class":66},[49,1181,229],{"class":55},[49,1183,637],{"class":55},[49,1185,969],{"class":66},[49,1187,110],{"class":55},[49,1189,1162],{"class":97},[49,1191,563],{"class":66},[49,1193,1194,1196,1198,1201,1203,1205],{"class":51,"line":618},[49,1195,928],{"class":66},[49,1197,214],{"class":55},[49,1199,1200],{"class":62},"step_by",[49,1202,91],{"class":66},[49,1204,191],{"class":97},[49,1206,563],{"class":66},[49,1208,1209,1211,1213,1216],{"class":51,"line":651},[49,1210,928],{"class":66},[49,1212,214],{"class":55},[49,1214,1215],{"class":62},"chain",[49,1217,1218],{"class":66},"(other)\n",[49,1220,1221,1223,1225,1227,1230],{"class":51,"line":683},[49,1222,928],{"class":66},[49,1224,214],{"class":55},[49,1226,484],{"class":62},[49,1228,1229],{"class":66},"()                       ",[49,1231,1232],{"class":128},"\u002F\u002F requires DoubleEndedIterator\n",[49,1234,1235,1237,1239,1242,1244],{"class":51,"line":696},[49,1236,928],{"class":66},[49,1238,214],{"class":55},[49,1240,1241],{"class":62},"peekable",[49,1243,1099],{"class":66},[49,1245,1246],{"class":128},"\u002F\u002F Peekable — see next without consuming\n",[49,1248,1249,1251,1253,1256,1259],{"class":51,"line":708},[49,1250,928],{"class":66},[49,1252,214],{"class":55},[49,1254,1255],{"class":62},"cycle",[49,1257,1258],{"class":66},"()                     ",[49,1260,1261],{"class":128},"\u002F\u002F infinite repeat (Clone-able items)\n",[49,1263,1264,1266,1268,1271,1274,1276,1279,1281,1284,1287],{"class":51,"line":720},[49,1265,928],{"class":66},[49,1267,214],{"class":55},[49,1269,1270],{"class":62},"scan",[49,1272,1273],{"class":66},"(init, ",[49,1275,229],{"class":55},[49,1277,1278],{"class":66},"state, x",[49,1280,229],{"class":55},[49,1282,1283],{"class":55}," ...",[49,1285,1286],{"class":66},")  ",[49,1288,1289],{"class":128},"\u002F\u002F stateful map, returns Option\n",[49,1291,1292,1294,1296,1299],{"class":51,"line":745},[49,1293,928],{"class":66},[49,1295,214],{"class":55},[49,1297,1298],{"class":62},"dedup",[49,1300,487],{"class":66},[49,1302,1303,1305,1307,1310,1312],{"class":51,"line":775},[49,1304,928],{"class":66},[49,1306,214],{"class":55},[49,1308,1309],{"class":62},"unzip",[49,1311,1258],{"class":66},[49,1313,1314],{"class":128},"\u002F\u002F (Vec\u003CA>, Vec\u003CB>)\n",[49,1316,1317,1319,1321,1323],{"class":51,"line":795},[49,1318,928],{"class":66},[49,1320,214],{"class":55},[49,1322,154],{"class":62},[49,1324,487],{"class":66},[49,1326,1327,1329,1331,1334,1337],{"class":51,"line":819},[49,1328,928],{"class":66},[49,1330,214],{"class":55},[49,1332,1333],{"class":62},"copied",[49,1335,1336],{"class":66},"()                    ",[49,1338,1339],{"class":128},"\u002F\u002F Iterator\u003CItem=&T where T:Copy> -> Item=T\n",[49,1341,1342,1344,1346,1349,1351],{"class":51,"line":868},[49,1343,928],{"class":66},[49,1345,214],{"class":55},[49,1347,1348],{"class":62},"cloned",[49,1350,1336],{"class":66},[49,1352,1353],{"class":128},"\u002F\u002F Iterator\u003CItem=&T> -> Item=T (T: Clone)\n",[49,1355,1356,1358,1360,1363,1365],{"class":51,"line":895},[49,1357,928],{"class":66},[49,1359,214],{"class":55},[49,1361,1362],{"class":62},"by_ref",[49,1364,1336],{"class":66},[49,1366,1367],{"class":128},"\u002F\u002F borrow iterator for partial consumption\n",[27,1369,1371],{"id":1370},"common-consumers","Common Consumers",[37,1373,1374],{"language":39},[41,1375,1377],{"className":43,"code":1376,"language":39,"meta":45,"style":45},"it.collect::\u003CVec\u003C_>>()\nit.collect::\u003CHashMap\u003CK, V>>()\nit.sum::\u003Ci32>()\nit.product::\u003Ci32>()\nit.count()\nit.last()              \u002F\u002F Option\u003CT>\nit.nth(5)\nit.all(|x| *x > 0)\nit.any(|x| *x > 0)\nit.find(|x| *x > 0)    \u002F\u002F first matching\nit.position(|x| *x > 0) \u002F\u002F Option\u003Cusize>\nit.fold(init, |acc, x| acc + x)\nit.try_fold(init, |acc, x| Ok(acc + x))   \u002F\u002F bails on Err\nit.for_each(|x| println!(\"{x}\"))\nit.max() \u002F it.min()\nit.max_by_key(|x| *x)\nit.min_by(|a, b| a.cmp(b))\nit.eq(other)\nit.ne(other)\nit.lt(other)\nit.cmp(other)\nit.partition(|x| *x > 0)   \u002F\u002F (Vec\u003CT>, Vec\u003CT>)\nit.unzip()\n",[32,1378,1379,1397,1425,1441,1458,1468,1483,1498,1525,1552,1583,1613,1639,1670,1697,1722,1744,1773,1784,1795,1806,1816,1847],{"__ignoreMap":45},[49,1380,1381,1383,1385,1387,1389,1391,1394],{"class":51,"line":52},[49,1382,928],{"class":66},[49,1384,214],{"class":55},[49,1386,154],{"class":62},[49,1388,116],{"class":55},[49,1390,110],{"class":66},[49,1392,1393],{"class":62},"Vec",[49,1395,1396],{"class":66},"\u003C_>>()\n",[49,1398,1399,1401,1403,1405,1407,1409,1412,1414,1417,1419,1422],{"class":51,"line":70},[49,1400,928],{"class":66},[49,1402,214],{"class":55},[49,1404,154],{"class":62},[49,1406,116],{"class":55},[49,1408,110],{"class":66},[49,1410,1411],{"class":62},"HashMap",[49,1413,110],{"class":66},[49,1415,1416],{"class":62},"K",[49,1418,21],{"class":66},[49,1420,1421],{"class":62},"V",[49,1423,1424],{"class":66},">>()\n",[49,1426,1427,1429,1431,1433,1435,1437,1439],{"class":51,"line":82},[49,1428,928],{"class":66},[49,1430,214],{"class":55},[49,1432,288],{"class":62},[49,1434,116],{"class":55},[49,1436,110],{"class":66},[49,1438,813],{"class":62},[49,1440,816],{"class":66},[49,1442,1443,1445,1447,1450,1452,1454,1456],{"class":51,"line":125},[49,1444,928],{"class":66},[49,1446,214],{"class":55},[49,1448,1449],{"class":62},"product",[49,1451,116],{"class":55},[49,1453,110],{"class":66},[49,1455,813],{"class":62},[49,1457,816],{"class":66},[49,1459,1460,1462,1464,1466],{"class":51,"line":132},[49,1461,928],{"class":66},[49,1463,214],{"class":55},[49,1465,291],{"class":62},[49,1467,487],{"class":66},[49,1469,1470,1472,1474,1477,1480],{"class":51,"line":524},[49,1471,928],{"class":66},[49,1473,214],{"class":55},[49,1475,1476],{"class":62},"last",[49,1478,1479],{"class":66},"()              ",[49,1481,1482],{"class":128},"\u002F\u002F Option\u003CT>\n",[49,1484,1485,1487,1489,1492,1494,1496],{"class":51,"line":536},[49,1486,928],{"class":66},[49,1488,214],{"class":55},[49,1490,1491],{"class":62},"nth",[49,1493,91],{"class":66},[49,1495,476],{"class":97},[49,1497,563],{"class":66},[49,1499,1500,1502,1504,1507,1509,1511,1513,1515,1517,1519,1521,1523],{"class":51,"line":548},[49,1501,928],{"class":66},[49,1503,214],{"class":55},[49,1505,1506],{"class":62},"all",[49,1508,91],{"class":66},[49,1510,229],{"class":55},[49,1512,232],{"class":66},[49,1514,229],{"class":55},[49,1516,637],{"class":55},[49,1518,969],{"class":66},[49,1520,972],{"class":55},[49,1522,975],{"class":97},[49,1524,563],{"class":66},[49,1526,1527,1529,1531,1534,1536,1538,1540,1542,1544,1546,1548,1550],{"class":51,"line":566},[49,1528,928],{"class":66},[49,1530,214],{"class":55},[49,1532,1533],{"class":62},"any",[49,1535,91],{"class":66},[49,1537,229],{"class":55},[49,1539,232],{"class":66},[49,1541,229],{"class":55},[49,1543,637],{"class":55},[49,1545,969],{"class":66},[49,1547,972],{"class":55},[49,1549,975],{"class":97},[49,1551,563],{"class":66},[49,1553,1554,1556,1558,1561,1563,1565,1567,1569,1571,1573,1575,1577,1580],{"class":51,"line":582},[49,1555,928],{"class":66},[49,1557,214],{"class":55},[49,1559,1560],{"class":62},"find",[49,1562,91],{"class":66},[49,1564,229],{"class":55},[49,1566,232],{"class":66},[49,1568,229],{"class":55},[49,1570,637],{"class":55},[49,1572,969],{"class":66},[49,1574,972],{"class":55},[49,1576,975],{"class":97},[49,1578,1579],{"class":66},")    ",[49,1581,1582],{"class":128},"\u002F\u002F first matching\n",[49,1584,1585,1587,1589,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610],{"class":51,"line":598},[49,1586,928],{"class":66},[49,1588,214],{"class":55},[49,1590,1591],{"class":62},"position",[49,1593,91],{"class":66},[49,1595,229],{"class":55},[49,1597,232],{"class":66},[49,1599,229],{"class":55},[49,1601,637],{"class":55},[49,1603,969],{"class":66},[49,1605,972],{"class":55},[49,1607,975],{"class":97},[49,1609,101],{"class":66},[49,1611,1612],{"class":128},"\u002F\u002F Option\u003Cusize>\n",[49,1614,1615,1617,1619,1621,1623,1625,1628,1630,1633,1636],{"class":51,"line":618},[49,1616,928],{"class":66},[49,1618,214],{"class":55},[49,1620,151],{"class":62},[49,1622,1273],{"class":66},[49,1624,229],{"class":55},[49,1626,1627],{"class":66},"acc, x",[49,1629,229],{"class":55},[49,1631,1632],{"class":66}," acc ",[49,1634,1635],{"class":55},"+",[49,1637,1638],{"class":66}," x)\n",[49,1640,1641,1643,1645,1648,1650,1652,1654,1656,1659,1662,1664,1667],{"class":51,"line":651},[49,1642,928],{"class":66},[49,1644,214],{"class":55},[49,1646,1647],{"class":62},"try_fold",[49,1649,1273],{"class":66},[49,1651,229],{"class":55},[49,1653,1627],{"class":66},[49,1655,229],{"class":55},[49,1657,1658],{"class":62}," Ok",[49,1660,1661],{"class":66},"(acc ",[49,1663,1635],{"class":55},[49,1665,1666],{"class":66}," x))   ",[49,1668,1669],{"class":128},"\u002F\u002F bails on Err\n",[49,1671,1672,1674,1676,1679,1681,1683,1685,1687,1690,1692,1695],{"class":51,"line":683},[49,1673,928],{"class":66},[49,1675,214],{"class":55},[49,1677,1678],{"class":62},"for_each",[49,1680,91],{"class":66},[49,1682,229],{"class":55},[49,1684,232],{"class":66},[49,1686,229],{"class":55},[49,1688,1689],{"class":62}," println!",[49,1691,91],{"class":66},[49,1693,1694],{"class":271},"\"{x}\"",[49,1696,892],{"class":66},[49,1698,1699,1701,1703,1706,1709,1712,1715,1717,1720],{"class":51,"line":696},[49,1700,928],{"class":66},[49,1702,214],{"class":55},[49,1704,1705],{"class":62},"max",[49,1707,1708],{"class":66},"() ",[49,1710,1711],{"class":55},"\u002F",[49,1713,1714],{"class":66}," it",[49,1716,214],{"class":55},[49,1718,1719],{"class":62},"min",[49,1721,487],{"class":66},[49,1723,1724,1726,1728,1731,1733,1735,1737,1739,1741],{"class":51,"line":708},[49,1725,928],{"class":66},[49,1727,214],{"class":55},[49,1729,1730],{"class":62},"max_by_key",[49,1732,91],{"class":66},[49,1734,229],{"class":55},[49,1736,232],{"class":66},[49,1738,229],{"class":55},[49,1740,637],{"class":55},[49,1742,1743],{"class":66},"x)\n",[49,1745,1746,1748,1750,1753,1755,1757,1760,1762,1765,1767,1770],{"class":51,"line":720},[49,1747,928],{"class":66},[49,1749,214],{"class":55},[49,1751,1752],{"class":62},"min_by",[49,1754,91],{"class":66},[49,1756,229],{"class":55},[49,1758,1759],{"class":66},"a, b",[49,1761,229],{"class":55},[49,1763,1764],{"class":66}," a",[49,1766,214],{"class":55},[49,1768,1769],{"class":62},"cmp",[49,1771,1772],{"class":66},"(b))\n",[49,1774,1775,1777,1779,1782],{"class":51,"line":745},[49,1776,928],{"class":66},[49,1778,214],{"class":55},[49,1780,1781],{"class":62},"eq",[49,1783,1218],{"class":66},[49,1785,1786,1788,1790,1793],{"class":51,"line":775},[49,1787,928],{"class":66},[49,1789,214],{"class":55},[49,1791,1792],{"class":62},"ne",[49,1794,1218],{"class":66},[49,1796,1797,1799,1801,1804],{"class":51,"line":795},[49,1798,928],{"class":66},[49,1800,214],{"class":55},[49,1802,1803],{"class":62},"lt",[49,1805,1218],{"class":66},[49,1807,1808,1810,1812,1814],{"class":51,"line":819},[49,1809,928],{"class":66},[49,1811,214],{"class":55},[49,1813,1769],{"class":62},[49,1815,1218],{"class":66},[49,1817,1818,1820,1822,1825,1827,1829,1831,1833,1835,1837,1839,1841,1844],{"class":51,"line":868},[49,1819,928],{"class":66},[49,1821,214],{"class":55},[49,1823,1824],{"class":62},"partition",[49,1826,91],{"class":66},[49,1828,229],{"class":55},[49,1830,232],{"class":66},[49,1832,229],{"class":55},[49,1834,637],{"class":55},[49,1836,969],{"class":66},[49,1838,972],{"class":55},[49,1840,975],{"class":97},[49,1842,1843],{"class":66},")   ",[49,1845,1846],{"class":128},"\u002F\u002F (Vec\u003CT>, Vec\u003CT>)\n",[49,1848,1849,1851,1853,1855],{"class":51,"line":895},[49,1850,928],{"class":66},[49,1852,214],{"class":55},[49,1854,1309],{"class":62},[49,1856,487],{"class":66},[27,1858,1860,1862,1863],{"id":1859},"collect-and-fromiterator",[32,1861,154],{}," and ",[32,1864,1865],{},"FromIterator",[37,1867,1868],{"language":39},[41,1869,1871],{"className":43,"code":1870,"language":39,"meta":45,"style":45},"let v: Vec\u003Ci32> = (0..5).collect();\nlet s: String = \"abc\".chars().collect();\nlet m: HashMap\u003C&str, i32> = [(\"a\", 1), (\"b\", 2)].into_iter().collect();\nlet (evens, odds): (Vec\u003Ci32>, Vec\u003Ci32>) = (0..10).partition(|x| x % 2 == 0);\n",[32,1872,1873,1911,1941,2003],{"__ignoreMap":45},[49,1874,1875,1877,1879,1881,1884,1886,1888,1891,1893,1896,1898,1900,1902,1904,1906,1908],{"class":51,"line":52},[49,1876,171],{"class":55},[49,1878,211],{"class":66},[49,1880,307],{"class":55},[49,1882,1883],{"class":62}," Vec",[49,1885,110],{"class":66},[49,1887,813],{"class":62},[49,1889,1890],{"class":66},"> ",[49,1892,177],{"class":55},[49,1894,1895],{"class":66}," (",[49,1897,455],{"class":97},[49,1899,458],{"class":55},[49,1901,476],{"class":97},[49,1903,479],{"class":66},[49,1905,214],{"class":55},[49,1907,154],{"class":62},[49,1909,1910],{"class":66},"();\n",[49,1912,1913,1915,1918,1920,1923,1926,1929,1931,1933,1935,1937,1939],{"class":51,"line":70},[49,1914,171],{"class":55},[49,1916,1917],{"class":66}," s",[49,1919,307],{"class":55},[49,1921,1922],{"class":62}," String",[49,1924,1925],{"class":55}," =",[49,1927,1928],{"class":271}," \"abc\"",[49,1930,214],{"class":55},[49,1932,497],{"class":62},[49,1934,220],{"class":66},[49,1936,214],{"class":55},[49,1938,154],{"class":62},[49,1940,1910],{"class":66},[49,1942,1943,1945,1948,1950,1953,1955,1958,1960,1962,1964,1966,1968,1971,1974,1976,1978,1981,1984,1986,1988,1991,1993,1995,1997,1999,2001],{"class":51,"line":82},[49,1944,171],{"class":55},[49,1946,1947],{"class":66}," m",[49,1949,307],{"class":55},[49,1951,1952],{"class":62}," HashMap",[49,1954,110],{"class":66},[49,1956,1957],{"class":55},"&",[49,1959,686],{"class":62},[49,1961,21],{"class":66},[49,1963,813],{"class":62},[49,1965,1890],{"class":66},[49,1967,177],{"class":55},[49,1969,1970],{"class":66}," [(",[49,1972,1973],{"class":271},"\"a\"",[49,1975,21],{"class":66},[49,1977,186],{"class":97},[49,1979,1980],{"class":66},"), (",[49,1982,1983],{"class":271},"\"b\"",[49,1985,21],{"class":66},[49,1987,191],{"class":97},[49,1989,1990],{"class":66},")]",[49,1992,214],{"class":55},[49,1994,543],{"class":62},[49,1996,220],{"class":66},[49,1998,214],{"class":55},[49,2000,154],{"class":62},[49,2002,1910],{"class":66},[49,2004,2005,2007,2010,2012,2014,2016,2018,2020,2023,2025,2027,2029,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2061,2063,2066,2068],{"class":51,"line":125},[49,2006,171],{"class":55},[49,2008,2009],{"class":66}," (evens, odds)",[49,2011,307],{"class":55},[49,2013,1895],{"class":66},[49,2015,1393],{"class":62},[49,2017,110],{"class":66},[49,2019,813],{"class":62},[49,2021,2022],{"class":66},">, ",[49,2024,1393],{"class":62},[49,2026,110],{"class":66},[49,2028,813],{"class":62},[49,2030,2031],{"class":66},">) ",[49,2033,177],{"class":55},[49,2035,1895],{"class":66},[49,2037,455],{"class":97},[49,2039,458],{"class":55},[49,2041,461],{"class":97},[49,2043,479],{"class":66},[49,2045,214],{"class":55},[49,2047,1824],{"class":62},[49,2049,91],{"class":66},[49,2051,229],{"class":55},[49,2053,232],{"class":66},[49,2055,229],{"class":55},[49,2057,237],{"class":66},[49,2059,2060],{"class":55},"%",[49,2062,243],{"class":97},[49,2064,2065],{"class":55}," ==",[49,2067,975],{"class":97},[49,2069,2070],{"class":66},");\n",[14,2072,2073,2075,2076,2079,2080,2082],{},[32,2074,154],{}," can build ",[2077,2078,1533],"em",{}," ",[32,2081,1865],{}," type — the turbofish or type annotation tells it which.",[27,2084,2086,2087,479],{"id":2085},"custom-iterator-manual-impl","Custom Iterator (Manual ",[32,2088,2089],{},"impl",[37,2091,2092],{"language":39},[41,2093,2095],{"className":43,"code":2094,"language":39,"meta":45,"style":45},"struct Counter { count: u32 }\nimpl Counter {\n    fn new() -> Self { Counter { count: 0 } }\n}\nimpl Iterator for Counter {\n    type Item = u32;\n    fn next(&mut self) -> Option\u003CSelf::Item> {\n        self.count += 1;\n        if self.count \u003C= 5 { Some(self.count) } else { None }\n    }\n}\n\nfor n in Counter::new().map(|x| x * 2) {\n    println!(\"{n}\");   \u002F\u002F 2, 4, 6, 8, 10\n}\n",[32,2096,2097,2116,2124,2152,2156,2169,2181,2210,2228,2267,2272,2276,2282,2321,2336],{"__ignoreMap":45},[49,2098,2099,2102,2105,2108,2110,2113],{"class":51,"line":52},[49,2100,2101],{"class":55},"struct",[49,2103,2104],{"class":62}," Counter",[49,2106,2107],{"class":66}," { count",[49,2109,307],{"class":55},[49,2111,2112],{"class":62}," u32",[49,2114,2115],{"class":66}," }\n",[49,2117,2118,2120,2122],{"class":51,"line":70},[49,2119,2089],{"class":55},[49,2121,2104],{"class":62},[49,2123,67],{"class":66},[49,2125,2126,2128,2131,2133,2135,2138,2140,2143,2145,2147,2149],{"class":51,"line":82},[49,2127,85],{"class":55},[49,2129,2130],{"class":62}," new",[49,2132,1708],{"class":66},[49,2134,104],{"class":55},[49,2136,2137],{"class":97}," Self",[49,2139,1008],{"class":66},[49,2141,2142],{"class":62},"Counter",[49,2144,2107],{"class":66},[49,2146,307],{"class":55},[49,2148,975],{"class":97},[49,2150,2151],{"class":66}," } }\n",[49,2153,2154],{"class":51,"line":125},[49,2155,135],{"class":66},[49,2157,2158,2160,2162,2165,2167],{"class":51,"line":132},[49,2159,2089],{"class":55},[49,2161,63],{"class":62},[49,2163,2164],{"class":55}," for",[49,2166,2104],{"class":62},[49,2168,67],{"class":66},[49,2170,2171,2173,2175,2177,2179],{"class":51,"line":524},[49,2172,73],{"class":55},[49,2174,76],{"class":62},[49,2176,1925],{"class":55},[49,2178,2112],{"class":62},[49,2180,79],{"class":66},[49,2182,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207],{"class":51,"line":536},[49,2184,85],{"class":55},[49,2186,88],{"class":62},[49,2188,91],{"class":66},[49,2190,94],{"class":55},[49,2192,98],{"class":97},[49,2194,101],{"class":66},[49,2196,104],{"class":55},[49,2198,107],{"class":62},[49,2200,110],{"class":66},[49,2202,113],{"class":97},[49,2204,116],{"class":55},[49,2206,119],{"class":62},[49,2208,2209],{"class":66},"> {\n",[49,2211,2212,2215,2217,2220,2223,2226],{"class":51,"line":548},[49,2213,2214],{"class":97},"        self",[49,2216,214],{"class":55},[49,2218,2219],{"class":66},"count ",[49,2221,2222],{"class":55},"+=",[49,2224,2225],{"class":97}," 1",[49,2227,79],{"class":66},[49,2229,2230,2233,2235,2237,2239,2242,2245,2247,2249,2251,2254,2256,2259,2261,2263,2265],{"class":51,"line":566},[49,2231,2232],{"class":55},"        if",[49,2234,98],{"class":97},[49,2236,214],{"class":55},[49,2238,2219],{"class":66},[49,2240,2241],{"class":55},"\u003C=",[49,2243,2244],{"class":97}," 5",[49,2246,1008],{"class":66},[49,2248,835],{"class":62},[49,2250,91],{"class":66},[49,2252,2253],{"class":97},"self",[49,2255,214],{"class":55},[49,2257,2258],{"class":66},"count) } ",[49,2260,1020],{"class":55},[49,2262,1008],{"class":66},[49,2264,1025],{"class":62},[49,2266,2115],{"class":66},[49,2268,2269],{"class":51,"line":582},[49,2270,2271],{"class":66},"    }\n",[49,2273,2274],{"class":51,"line":598},[49,2275,135],{"class":66},[49,2277,2278],{"class":51,"line":618},[49,2279,2281],{"emptyLinePlaceholder":2280},true,"\n",[49,2283,2284,2286,2289,2291,2293,2295,2298,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318],{"class":51,"line":651},[49,2285,254],{"class":55},[49,2287,2288],{"class":66}," n ",[49,2290,260],{"class":55},[49,2292,2104],{"class":62},[49,2294,116],{"class":55},[49,2296,2297],{"class":62},"new",[49,2299,220],{"class":66},[49,2301,214],{"class":55},[49,2303,145],{"class":62},[49,2305,91],{"class":66},[49,2307,229],{"class":55},[49,2309,232],{"class":66},[49,2311,229],{"class":55},[49,2313,237],{"class":66},[49,2315,240],{"class":55},[49,2317,243],{"class":97},[49,2319,2320],{"class":66},") {\n",[49,2322,2323,2326,2328,2331,2333],{"class":51,"line":683},[49,2324,2325],{"class":62},"    println!",[49,2327,91],{"class":66},[49,2329,2330],{"class":271},"\"{n}\"",[49,2332,246],{"class":66},[49,2334,2335],{"class":128},"\u002F\u002F 2, 4, 6, 8, 10\n",[49,2337,2338],{"class":51,"line":696},[49,2339,135],{"class":66},[27,2341,2343],{"id":2342},"performance-iterators-compile-to-tight-loops","Performance: Iterators Compile to Tight Loops",[37,2345,2346],{"language":39},[41,2347,2349],{"className":43,"code":2348,"language":39,"meta":45,"style":45},"let v: Vec\u003Ci32> = (0..1_000_000).collect();\nlet sum: i32 = v.iter().map(|x| x + 1).filter(|x| x % 2 == 0).sum();\n",[32,2350,2351,2386],{"__ignoreMap":45},[49,2352,2353,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375,2378,2380,2382,2384],{"class":51,"line":52},[49,2354,171],{"class":55},[49,2356,211],{"class":66},[49,2358,307],{"class":55},[49,2360,1883],{"class":62},[49,2362,110],{"class":66},[49,2364,813],{"class":62},[49,2366,1890],{"class":66},[49,2368,177],{"class":55},[49,2370,1895],{"class":66},[49,2372,455],{"class":97},[49,2374,458],{"class":55},[49,2376,2377],{"class":97},"1_000_000",[49,2379,479],{"class":66},[49,2381,214],{"class":55},[49,2383,154],{"class":62},[49,2385,1910],{"class":66},[49,2387,2388,2390,2393,2395,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456],{"class":51,"line":70},[49,2389,171],{"class":55},[49,2391,2392],{"class":66}," sum",[49,2394,307],{"class":55},[49,2396,2397],{"class":62}," i32",[49,2399,1925],{"class":55},[49,2401,211],{"class":66},[49,2403,214],{"class":55},[49,2405,217],{"class":62},[49,2407,220],{"class":66},[49,2409,214],{"class":55},[49,2411,145],{"class":62},[49,2413,91],{"class":66},[49,2415,229],{"class":55},[49,2417,232],{"class":66},[49,2419,229],{"class":55},[49,2421,237],{"class":66},[49,2423,1635],{"class":55},[49,2425,2225],{"class":97},[49,2427,479],{"class":66},[49,2429,214],{"class":55},[49,2431,148],{"class":62},[49,2433,91],{"class":66},[49,2435,229],{"class":55},[49,2437,232],{"class":66},[49,2439,229],{"class":55},[49,2441,237],{"class":66},[49,2443,2060],{"class":55},[49,2445,243],{"class":97},[49,2447,2065],{"class":55},[49,2449,975],{"class":97},[49,2451,479],{"class":66},[49,2453,214],{"class":55},[49,2455,288],{"class":62},[49,2457,1910],{"class":66},[14,2459,2460,2461,2463],{},"This compiles to essentially the same machine code as a hand-written ",[32,2462,254],{}," loop. No allocations, no closures dispatched at runtime — everything inlines.",[27,2465,2467],{"id":2466},"doubleendediterator",[32,2468,2469],{},"DoubleEndedIterator",[14,2471,2472,2475,2476,2478],{},[32,2473,2474],{},".rev()"," requires ",[32,2477,2469],{}," (can pull from the back):",[37,2480,2481],{"language":39},[41,2482,2484],{"className":43,"code":2483,"language":39,"meta":45,"style":45},"for x in (0..5).rev() { print!(\"{x} \"); }   \u002F\u002F 4 3 2 1 0\n",[32,2485,2486],{"__ignoreMap":45},[49,2487,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2511,2514,2516,2519,2522],{"class":51,"line":52},[49,2489,254],{"class":55},[49,2491,237],{"class":66},[49,2493,260],{"class":55},[49,2495,1895],{"class":66},[49,2497,455],{"class":97},[49,2499,458],{"class":55},[49,2501,476],{"class":97},[49,2503,479],{"class":66},[49,2505,214],{"class":55},[49,2507,484],{"class":62},[49,2509,2510],{"class":66},"() { ",[49,2512,2513],{"class":62},"print!",[49,2515,91],{"class":66},[49,2517,2518],{"class":271},"\"{x} \"",[49,2520,2521],{"class":66},"); }   ",[49,2523,2524],{"class":128},"\u002F\u002F 4 3 2 1 0\n",[14,2526,2527,2528,2531],{},"Not all iterators are double-ended (",[32,2529,2530],{},"std::io::Lines"," reading a file isn't).",[27,2533,2535],{"id":2534},"exactsizeiterator",[32,2536,2537],{},"ExactSizeIterator",[14,2539,2540,2543],{},[32,2541,2542],{},".len()"," works if the iterator knows its exact remaining length.",[27,2545,2547],{"id":2546},"infinite-iterators","Infinite Iterators",[37,2549,2550],{"language":39},[41,2551,2553],{"className":43,"code":2552,"language":39,"meta":45,"style":45},"let ones = std::iter::repeat(1);\nlet natural = (0..).map(|x| x * 2);\nlet mut evens = (0..).step_by(2);\n",[32,2554,2555,2581,2618],{"__ignoreMap":45},[49,2556,2557,2559,2562,2564,2567,2569,2571,2573,2575,2577,2579],{"class":51,"line":52},[49,2558,171],{"class":55},[49,2560,2561],{"class":66}," ones ",[49,2563,177],{"class":55},[49,2565,2566],{"class":62}," std",[49,2568,116],{"class":55},[49,2570,217],{"class":62},[49,2572,116],{"class":55},[49,2574,732],{"class":62},[49,2576,91],{"class":66},[49,2578,186],{"class":97},[49,2580,2070],{"class":66},[49,2582,2583,2585,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616],{"class":51,"line":70},[49,2584,171],{"class":55},[49,2586,2587],{"class":66}," natural ",[49,2589,177],{"class":55},[49,2591,1895],{"class":66},[49,2593,455],{"class":97},[49,2595,458],{"class":55},[49,2597,479],{"class":66},[49,2599,214],{"class":55},[49,2601,145],{"class":62},[49,2603,91],{"class":66},[49,2605,229],{"class":55},[49,2607,232],{"class":66},[49,2609,229],{"class":55},[49,2611,237],{"class":66},[49,2613,240],{"class":55},[49,2615,243],{"class":97},[49,2617,2070],{"class":66},[49,2619,2620,2622,2625,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646],{"class":51,"line":82},[49,2621,171],{"class":55},[49,2623,2624],{"class":55}," mut",[49,2626,2627],{"class":66}," evens ",[49,2629,177],{"class":55},[49,2631,1895],{"class":66},[49,2633,455],{"class":97},[49,2635,458],{"class":55},[49,2637,479],{"class":66},[49,2639,214],{"class":55},[49,2641,1200],{"class":62},[49,2643,91],{"class":66},[49,2645,191],{"class":97},[49,2647,2070],{"class":66},[14,2649,2650,2651,376,2654,2656,2657,2660],{},"Use ",[32,2652,2653],{},"take(n)",[32,2655,1145],{}," to bound them. Don't ",[32,2658,2659],{},".collect()"," an infinite iterator!",[27,2662,2663],{"id":1241},[32,2664,1241],{},[37,2666,2667],{"language":39},[41,2668,2670],{"className":43,"code":2669,"language":39,"meta":45,"style":45},"let mut it = vec.iter().peekable();\nlet first = it.peek();\nif let Some(&&3) = first { \u002F* ... *\u002F }\nlet actual = it.next();\n",[32,2671,2672,2697,2715,2744],{"__ignoreMap":45},[49,2673,2674,2676,2678,2680,2682,2685,2687,2689,2691,2693,2695],{"class":51,"line":52},[49,2675,171],{"class":55},[49,2677,2624],{"class":55},[49,2679,206],{"class":66},[49,2681,177],{"class":55},[49,2683,2684],{"class":66}," vec",[49,2686,214],{"class":55},[49,2688,217],{"class":62},[49,2690,220],{"class":66},[49,2692,214],{"class":55},[49,2694,1241],{"class":62},[49,2696,1910],{"class":66},[49,2698,2699,2701,2704,2706,2708,2710,2713],{"class":51,"line":70},[49,2700,171],{"class":55},[49,2702,2703],{"class":66}," first ",[49,2705,177],{"class":55},[49,2707,1714],{"class":66},[49,2709,214],{"class":55},[49,2711,2712],{"class":62},"peek",[49,2714,1910],{"class":66},[49,2716,2717,2720,2723,2725,2727,2730,2732,2734,2736,2739,2742],{"class":51,"line":82},[49,2718,2719],{"class":55},"if",[49,2721,2722],{"class":55}," let",[49,2724,852],{"class":62},[49,2726,91],{"class":66},[49,2728,2729],{"class":55},"&&",[49,2731,196],{"class":97},[49,2733,101],{"class":66},[49,2735,177],{"class":55},[49,2737,2738],{"class":66}," first { ",[49,2740,2741],{"class":128},"\u002F* ... *\u002F",[49,2743,2115],{"class":66},[49,2745,2746,2748,2751,2753,2755,2757,2760],{"class":51,"line":125},[49,2747,171],{"class":55},[49,2749,2750],{"class":66}," actual ",[49,2752,177],{"class":55},[49,2754,1714],{"class":66},[49,2756,214],{"class":55},[49,2758,2759],{"class":62},"next",[49,2761,1910],{"class":66},[14,2763,2764,2766,2767,2770],{},[32,2765,2712],{}," returns ",[32,2768,2769],{},"Option\u003C&Item>"," without advancing.",[27,2772,2774],{"id":2773},"fuse",[32,2775,2773],{},[14,2777,2778,2779,2781,2782,2784,2785,2787,2788,2790],{},"After an iterator returns ",[32,2780,1025],{}," once, calling ",[32,2783,2759],{}," again is unspecified — ",[32,2786,2773],{}," makes it always return ",[32,2789,1025],{}," after the first:",[37,2792,2793],{"language":39},[41,2794,2796],{"className":43,"code":2795,"language":39,"meta":45,"style":45},"let mut it = some_iter.fuse();\nwhile let Some(x) = it.next() { \u002F* ... *\u002F }\nit.next();   \u002F\u002F guaranteed None\n",[32,2797,2798,2817,2843],{"__ignoreMap":45},[49,2799,2800,2802,2804,2806,2808,2811,2813,2815],{"class":51,"line":52},[49,2801,171],{"class":55},[49,2803,2624],{"class":55},[49,2805,206],{"class":66},[49,2807,177],{"class":55},[49,2809,2810],{"class":66}," some_iter",[49,2812,214],{"class":55},[49,2814,2773],{"class":62},[49,2816,1910],{"class":66},[49,2818,2819,2822,2824,2826,2829,2831,2833,2835,2837,2839,2841],{"class":51,"line":70},[49,2820,2821],{"class":55},"while",[49,2823,2722],{"class":55},[49,2825,852],{"class":62},[49,2827,2828],{"class":66},"(x) ",[49,2830,177],{"class":55},[49,2832,1714],{"class":66},[49,2834,214],{"class":55},[49,2836,2759],{"class":62},[49,2838,2510],{"class":66},[49,2840,2741],{"class":128},[49,2842,2115],{"class":66},[49,2844,2845,2847,2849,2851,2854],{"class":51,"line":82},[49,2846,928],{"class":66},[49,2848,214],{"class":55},[49,2850,2759],{"class":62},[49,2852,2853],{"class":66},"();   ",[49,2855,2856],{"class":128},"\u002F\u002F guaranteed None\n",[27,2858,2860],{"id":2859},"inspect",[32,2861,2859],{},[14,2863,2864],{},"For debugging chains without breaking them:",[37,2866,2867],{"language":39},[41,2868,2870],{"className":43,"code":2869,"language":39,"meta":45,"style":45},"(0..5)\n    .inspect(|x| println!(\"before: {x}\"))\n    .map(|x| x * 2)\n    .inspect(|x| println!(\"after:  {x}\"))\n    .collect::\u003CVec\u003C_>>();\n",[32,2871,2872,2884,2908,2930,2953],{"__ignoreMap":45},[49,2873,2874,2876,2878,2880,2882],{"class":51,"line":52},[49,2875,91],{"class":66},[49,2877,455],{"class":97},[49,2879,458],{"class":55},[49,2881,476],{"class":97},[49,2883,563],{"class":66},[49,2885,2886,2889,2891,2893,2895,2897,2899,2901,2903,2906],{"class":51,"line":70},[49,2887,2888],{"class":55},"    .",[49,2890,2859],{"class":62},[49,2892,91],{"class":66},[49,2894,229],{"class":55},[49,2896,232],{"class":66},[49,2898,229],{"class":55},[49,2900,1689],{"class":62},[49,2902,91],{"class":66},[49,2904,2905],{"class":271},"\"before: {x}\"",[49,2907,892],{"class":66},[49,2909,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928],{"class":51,"line":82},[49,2911,2888],{"class":55},[49,2913,145],{"class":62},[49,2915,91],{"class":66},[49,2917,229],{"class":55},[49,2919,232],{"class":66},[49,2921,229],{"class":55},[49,2923,237],{"class":66},[49,2925,240],{"class":55},[49,2927,243],{"class":97},[49,2929,563],{"class":66},[49,2931,2932,2934,2936,2938,2940,2942,2944,2946,2948,2951],{"class":51,"line":125},[49,2933,2888],{"class":55},[49,2935,2859],{"class":62},[49,2937,91],{"class":66},[49,2939,229],{"class":55},[49,2941,232],{"class":66},[49,2943,229],{"class":55},[49,2945,1689],{"class":62},[49,2947,91],{"class":66},[49,2949,2950],{"class":271},"\"after:  {x}\"",[49,2952,892],{"class":66},[49,2954,2955,2957,2959,2961,2963,2965],{"class":51,"line":132},[49,2956,2888],{"class":55},[49,2958,154],{"class":62},[49,2960,116],{"class":55},[49,2962,110],{"class":66},[49,2964,1393],{"class":62},[49,2966,2967],{"class":66},"\u003C_>>();\n",[27,2969,2971],{"id":2970},"iterators-and-ownership","Iterators and Ownership",[37,2973,2974],{"language":39},[41,2975,2977],{"className":43,"code":2976,"language":39,"meta":45,"style":45},"let v = vec![String::from(\"a\"), String::from(\"b\")];\n\n\u002F\u002F Borrow (keep v alive):\nfor s in &v { \u002F* s: &String *\u002F }\n\n\u002F\u002F Consume (v gone after):\nfor s in v { \u002F* s: String *\u002F }\n\n\u002F\u002F Partial consume then use rest:\nlet mut it = v.into_iter();\nlet first = it.next();\nlet rest: Vec\u003C_> = it.collect();\n",[32,2978,2979,3018,3022,3027,3046,3050,3055,3071,3075,3080,3098,3114],{"__ignoreMap":45},[49,2980,2981,2983,2985,2987,2989,2991,2994,2996,2999,3001,3003,3005,3007,3009,3011,3013,3015],{"class":51,"line":52},[49,2982,171],{"class":55},[49,2984,174],{"class":66},[49,2986,177],{"class":55},[49,2988,180],{"class":62},[49,2990,183],{"class":66},[49,2992,2993],{"class":62},"String",[49,2995,116],{"class":55},[49,2997,2998],{"class":62},"from",[49,3000,91],{"class":66},[49,3002,1973],{"class":271},[49,3004,842],{"class":66},[49,3006,2993],{"class":62},[49,3008,116],{"class":55},[49,3010,2998],{"class":62},[49,3012,91],{"class":66},[49,3014,1983],{"class":271},[49,3016,3017],{"class":66},")];\n",[49,3019,3020],{"class":51,"line":70},[49,3021,2281],{"emptyLinePlaceholder":2280},[49,3023,3024],{"class":51,"line":82},[49,3025,3026],{"class":128},"\u002F\u002F Borrow (keep v alive):\n",[49,3028,3029,3031,3034,3036,3038,3041,3044],{"class":51,"line":125},[49,3030,254],{"class":55},[49,3032,3033],{"class":66}," s ",[49,3035,260],{"class":55},[49,3037,325],{"class":55},[49,3039,3040],{"class":66},"v { ",[49,3042,3043],{"class":128},"\u002F* s: &String *\u002F",[49,3045,2115],{"class":66},[49,3047,3048],{"class":51,"line":132},[49,3049,2281],{"emptyLinePlaceholder":2280},[49,3051,3052],{"class":51,"line":524},[49,3053,3054],{"class":128},"\u002F\u002F Consume (v gone after):\n",[49,3056,3057,3059,3061,3063,3066,3069],{"class":51,"line":536},[49,3058,254],{"class":55},[49,3060,3033],{"class":66},[49,3062,260],{"class":55},[49,3064,3065],{"class":66}," v { ",[49,3067,3068],{"class":128},"\u002F* s: String *\u002F",[49,3070,2115],{"class":66},[49,3072,3073],{"class":51,"line":548},[49,3074,2281],{"emptyLinePlaceholder":2280},[49,3076,3077],{"class":51,"line":566},[49,3078,3079],{"class":128},"\u002F\u002F Partial consume then use rest:\n",[49,3081,3082,3084,3086,3088,3090,3092,3094,3096],{"class":51,"line":582},[49,3083,171],{"class":55},[49,3085,2624],{"class":55},[49,3087,206],{"class":66},[49,3089,177],{"class":55},[49,3091,211],{"class":66},[49,3093,214],{"class":55},[49,3095,543],{"class":62},[49,3097,1910],{"class":66},[49,3099,3100,3102,3104,3106,3108,3110,3112],{"class":51,"line":598},[49,3101,171],{"class":55},[49,3103,2703],{"class":66},[49,3105,177],{"class":55},[49,3107,1714],{"class":66},[49,3109,214],{"class":55},[49,3111,2759],{"class":62},[49,3113,1910],{"class":66},[49,3115,3116,3118,3121,3123,3125,3128,3130,3132,3134,3136],{"class":51,"line":618},[49,3117,171],{"class":55},[49,3119,3120],{"class":66}," rest",[49,3122,307],{"class":55},[49,3124,1883],{"class":62},[49,3126,3127],{"class":66},"\u003C_> ",[49,3129,177],{"class":55},[49,3131,1714],{"class":66},[49,3133,214],{"class":55},[49,3135,154],{"class":62},[49,3137,1910],{"class":66},[27,3139,3141],{"id":3140},"common-patterns","Common Patterns",[3143,3144,3146],"h3",{"id":3145},"group-consecutive-equal-elements","Group consecutive equal elements",[37,3148,3149],{"language":39},[41,3150,3152],{"className":43,"code":3151,"language":39,"meta":45,"style":45},"let v = vec![1, 1, 2, 2, 2, 3];\nfor (key, group) in v.into_iter().group_by(|a, b| a == b) { \u002F* unstable API *\u002F }\n\u002F\u002F Use `itertools` crate for `group_by` on stable.\n",[32,3153,3154,3190,3233],{"__ignoreMap":45},[49,3155,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188],{"class":51,"line":52},[49,3157,171],{"class":55},[49,3159,174],{"class":66},[49,3161,177],{"class":55},[49,3163,180],{"class":62},[49,3165,183],{"class":66},[49,3167,186],{"class":97},[49,3169,21],{"class":66},[49,3171,186],{"class":97},[49,3173,21],{"class":66},[49,3175,191],{"class":97},[49,3177,21],{"class":66},[49,3179,191],{"class":97},[49,3181,21],{"class":66},[49,3183,191],{"class":97},[49,3185,21],{"class":66},[49,3187,196],{"class":97},[49,3189,199],{"class":66},[49,3191,3192,3194,3197,3199,3201,3203,3205,3207,3209,3212,3214,3216,3218,3220,3223,3225,3228,3231],{"class":51,"line":70},[49,3193,254],{"class":55},[49,3195,3196],{"class":66}," (key, group) ",[49,3198,260],{"class":55},[49,3200,211],{"class":66},[49,3202,214],{"class":55},[49,3204,543],{"class":62},[49,3206,220],{"class":66},[49,3208,214],{"class":55},[49,3210,3211],{"class":62},"group_by",[49,3213,91],{"class":66},[49,3215,229],{"class":55},[49,3217,1759],{"class":66},[49,3219,229],{"class":55},[49,3221,3222],{"class":66}," a ",[49,3224,643],{"class":55},[49,3226,3227],{"class":66}," b) { ",[49,3229,3230],{"class":128},"\u002F* unstable API *\u002F",[49,3232,2115],{"class":66},[49,3234,3235],{"class":51,"line":82},[49,3236,3237],{"class":128},"\u002F\u002F Use `itertools` crate for `group_by` on stable.\n",[3143,3239,3241],{"id":3240},"chunked-iterator","Chunked iterator",[37,3243,3244],{"language":39},[41,3245,3247],{"className":43,"code":3246,"language":39,"meta":45,"style":45},"for chunk in v.chunks(10) { \u002F* process *\u002F }\n",[32,3248,3249],{"__ignoreMap":45},[49,3250,3251,3253,3256,3258,3260,3262,3264,3266,3268,3271,3274],{"class":51,"line":52},[49,3252,254],{"class":55},[49,3254,3255],{"class":66}," chunk ",[49,3257,260],{"class":55},[49,3259,211],{"class":66},[49,3261,214],{"class":55},[49,3263,556],{"class":62},[49,3265,91],{"class":66},[49,3267,461],{"class":97},[49,3269,3270],{"class":66},") { ",[49,3272,3273],{"class":128},"\u002F* process *\u002F",[49,3275,2115],{"class":66},[3143,3277,3279],{"id":3278},"build-a-map-from-a-vec","Build a map from a vec",[37,3281,3282],{"language":39},[41,3283,3285],{"className":43,"code":3284,"language":39,"meta":45,"style":45},"let m: HashMap\u003Ci32, &str> = vec.iter().map(|x| (*x, \"x\")).collect();\n",[32,3286,3287],{"__ignoreMap":45},[49,3288,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329,3331,3333,3335,3338,3341,3344,3346,3348],{"class":51,"line":52},[49,3290,171],{"class":55},[49,3292,1947],{"class":66},[49,3294,307],{"class":55},[49,3296,1952],{"class":62},[49,3298,110],{"class":66},[49,3300,813],{"class":62},[49,3302,21],{"class":66},[49,3304,1957],{"class":55},[49,3306,686],{"class":62},[49,3308,1890],{"class":66},[49,3310,177],{"class":55},[49,3312,2684],{"class":66},[49,3314,214],{"class":55},[49,3316,217],{"class":62},[49,3318,220],{"class":66},[49,3320,214],{"class":55},[49,3322,145],{"class":62},[49,3324,91],{"class":66},[49,3326,229],{"class":55},[49,3328,232],{"class":66},[49,3330,229],{"class":55},[49,3332,1895],{"class":66},[49,3334,240],{"class":55},[49,3336,3337],{"class":66},"x, ",[49,3339,3340],{"class":271},"\"x\"",[49,3342,3343],{"class":66},"))",[49,3345,214],{"class":55},[49,3347,154],{"class":62},[49,3349,1910],{"class":66},[3143,3351,3353],{"id":3352},"sum-of-squares-of-evens","Sum of squares of evens",[37,3355,3356],{"language":39},[41,3357,3359],{"className":43,"code":3358,"language":39,"meta":45,"style":45},"let sum: i32 = (1..=100).filter(|x| x % 2 == 0).map(|x| x * x).sum();\n",[32,3360,3361],{"__ignoreMap":45},[49,3362,3363,3365,3367,3369,3371,3373,3375,3377,3379,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3427,3429,3431],{"class":51,"line":52},[49,3364,171],{"class":55},[49,3366,2392],{"class":66},[49,3368,307],{"class":55},[49,3370,2397],{"class":62},[49,3372,1925],{"class":55},[49,3374,1895],{"class":66},[49,3376,186],{"class":97},[49,3378,473],{"class":55},[49,3380,3381],{"class":97},"100",[49,3383,479],{"class":66},[49,3385,214],{"class":55},[49,3387,148],{"class":62},[49,3389,91],{"class":66},[49,3391,229],{"class":55},[49,3393,232],{"class":66},[49,3395,229],{"class":55},[49,3397,237],{"class":66},[49,3399,2060],{"class":55},[49,3401,243],{"class":97},[49,3403,2065],{"class":55},[49,3405,975],{"class":97},[49,3407,479],{"class":66},[49,3409,214],{"class":55},[49,3411,145],{"class":62},[49,3413,91],{"class":66},[49,3415,229],{"class":55},[49,3417,232],{"class":66},[49,3419,229],{"class":55},[49,3421,237],{"class":66},[49,3423,240],{"class":55},[49,3425,3426],{"class":66}," x)",[49,3428,214],{"class":55},[49,3430,288],{"class":62},[49,3432,1910],{"class":66},[3143,3434,3436],{"id":3435},"flatten-nested-options","Flatten nested options",[37,3438,3439],{"language":39},[41,3440,3442],{"className":43,"code":3441,"language":39,"meta":45,"style":45},"let v: Vec\u003Ci32> = vec![Some(1), None, Some(2)].into_iter().flatten().collect();\n",[32,3443,3444],{"__ignoreMap":45},[49,3445,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502],{"class":51,"line":52},[49,3447,171],{"class":55},[49,3449,211],{"class":66},[49,3451,307],{"class":55},[49,3453,1883],{"class":62},[49,3455,110],{"class":66},[49,3457,813],{"class":62},[49,3459,1890],{"class":66},[49,3461,177],{"class":55},[49,3463,180],{"class":62},[49,3465,183],{"class":66},[49,3467,835],{"class":62},[49,3469,91],{"class":66},[49,3471,186],{"class":97},[49,3473,842],{"class":66},[49,3475,1025],{"class":62},[49,3477,21],{"class":66},[49,3479,835],{"class":62},[49,3481,91],{"class":66},[49,3483,191],{"class":97},[49,3485,1990],{"class":66},[49,3487,214],{"class":55},[49,3489,543],{"class":62},[49,3491,220],{"class":66},[49,3493,214],{"class":55},[49,3495,1096],{"class":62},[49,3497,220],{"class":66},[49,3499,214],{"class":55},[49,3501,154],{"class":62},[49,3503,1910],{"class":66},[3143,3505,3507],{"id":3506},"find-max-by-key","Find max by key",[37,3509,3510],{"language":39},[41,3511,3513],{"className":43,"code":3512,"language":39,"meta":45,"style":45},"let max = v.iter().max_by_key(|x| x.score);\n",[32,3514,3515],{"__ignoreMap":45},[49,3516,3517,3519,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548],{"class":51,"line":52},[49,3518,171],{"class":55},[49,3520,3521],{"class":66}," max ",[49,3523,177],{"class":55},[49,3525,211],{"class":66},[49,3527,214],{"class":55},[49,3529,217],{"class":62},[49,3531,220],{"class":66},[49,3533,214],{"class":55},[49,3535,1730],{"class":62},[49,3537,91],{"class":66},[49,3539,229],{"class":55},[49,3541,232],{"class":66},[49,3543,229],{"class":55},[49,3545,1077],{"class":66},[49,3547,214],{"class":55},[49,3549,3550],{"class":66},"score);\n",[27,3552,3554],{"id":3553},"edge-cases-pitfalls","Edge Cases & Pitfalls",[3556,3557,3558,3571,3581,3597,3607,3629,3642,3655,3680],"ul",{},[3559,3560,3561,3566,3567,3570],"li",{},[18,3562,3563,3565],{},[32,3564,154],{}," ambiguity",": if you write ",[32,3568,3569],{},"let v = it.collect();"," without a type annotation, you'll get an error. Always annotate.",[3559,3572,3573,3576,3577,3580],{},[18,3574,3575],{},"Iterator invalidation",": you can't mutate the underlying collection while iterating via a borrowed iterator. ",[32,3578,3579],{},"Vec::retain"," is the safe way to filter in place.",[3559,3582,3583,3589,3590,3592,3593,3596],{},[18,3584,3585,3588],{},[32,3586,3587],{},"for x in vec"," consumes",": easy mistake — ",[32,3591,515],{}," is gone after. Use ",[32,3594,3595],{},"&vec"," to keep it.",[3559,3598,3599,3606],{},[18,3600,3601,3602,1711,3604],{},"Infinite iterator + ",[32,3603,291],{},[32,3605,288],{},": hangs forever.",[3559,3608,3609,3621,3622,3625,3626,3628],{},[18,3610,3611,3613,3614,3617,3618],{},[32,3612,2474],{}," on ",[32,3615,3616],{},"Range"," from ",[32,3619,3620],{},"0..",": ",[32,3623,3624],{},"RangeFrom"," isn't ",[32,3627,2469],{}," (no end to reverse to).",[3559,3630,3631,3637,3638,3641],{},[18,3632,3633,3636],{},[32,3634,3635],{},".zip"," stops at shorter",": zipping a 3-element with a 5-element yields 3 pairs. Use ",[32,3639,3640],{},"itertools::zip_longest"," for the padded form.",[3559,3643,3644,3621,3647,3650,3651,3654],{},[18,3645,3646],{},"Closure captures",[32,3648,3649],{},"it.map(|x| x + offset)"," borrows ",[32,3652,3653],{},"offset"," for the iterator's lifetime; can surprise you with borrow errors.",[3559,3656,3657,3664,3665,3668,3669,3671,3672,3675,3676,3679],{},[18,3658,3659,3613,3661],{},[32,3660,1096],{},[32,3662,3663],{},"Iterator\u003CItem = Option\u003CT>>",": this is a special impl — ",[32,3666,3667],{},"Option"," impls ",[32,3670,298],{},". Same for ",[32,3673,3674],{},"Result\u003CT, E>"," (only the ",[32,3677,3678],{},"Ok"," cases flatten).",[3559,3681,3682,3687,3688,3691],{},[18,3683,3684],{},[32,3685,3686],{},"Iterator::size_hint",": returns ",[32,3689,3690],{},"(lower, Option\u003Cupper>)","; useful for algorithms that need a size estimate.",[27,3693,3695],{"id":3694},"summary","Summary",[14,3697,3698,3699,3701,3702,3704,3705,214],{},"Iterators are lazy, zero-cost, and compose beautifully. Pick the right adapter for the job. ",[32,3700,154],{}," is a swiss-army knife driven by type inference. Avoid infinite iterator pitfalls. Manual ",[32,3703,34],{}," impl is straightforward — implement ",[32,3706,141],{},[14,3708,3709],{},"Next: Traits and generics — the type system's reuse mechanism.",[3711,3712,3713],"style",{},"html pre.shiki code .svdQ7, html code.shiki .svdQ7{--shiki-default:#D73A49;--shiki-github-dark:#F97583}html pre.shiki code .sIsaT, html code.shiki .sIsaT{--shiki-default:#6F42C1;--shiki-github-dark:#B392F0}html pre.shiki code .ssxIu, html code.shiki .ssxIu{--shiki-default:#24292E;--shiki-github-dark:#E1E4E8}html pre.shiki code .snvgF, html code.shiki .snvgF{--shiki-default:#005CC5;--shiki-github-dark:#79B8FF}html pre.shiki code .sdCPZ, html code.shiki .sdCPZ{--shiki-default:#6A737D;--shiki-github-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html.github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html pre.shiki code .sJ6F3, html code.shiki .sJ6F3{--shiki-default:#032F62;--shiki-github-dark:#9ECBFF}",{"title":45,"searchDepth":70,"depth":70,"links":3715},[3716,3718,3719,3720,3721,3722,3723,3724,3726,3728,3729,3730,3731,3732,3733,3734,3735,3736,3744,3745],{"id":29,"depth":70,"text":3717},"The Iterator Trait",{"id":158,"depth":70,"text":159},{"id":295,"depth":70,"text":298},{"id":382,"depth":70,"text":383},{"id":442,"depth":70,"text":443},{"id":915,"depth":70,"text":916},{"id":1370,"depth":70,"text":1371},{"id":1859,"depth":70,"text":3725},"collect and FromIterator",{"id":2085,"depth":70,"text":3727},"Custom Iterator (Manual impl)",{"id":2342,"depth":70,"text":2343},{"id":2466,"depth":70,"text":2469},{"id":2534,"depth":70,"text":2537},{"id":2546,"depth":70,"text":2547},{"id":1241,"depth":70,"text":1241},{"id":2773,"depth":70,"text":2773},{"id":2859,"depth":70,"text":2859},{"id":2970,"depth":70,"text":2971},{"id":3140,"depth":70,"text":3141,"children":3737},[3738,3739,3740,3741,3742,3743],{"id":3145,"depth":82,"text":3146},{"id":3240,"depth":82,"text":3241},{"id":3278,"depth":82,"text":3279},{"id":3352,"depth":82,"text":3353},{"id":3435,"depth":82,"text":3436},{"id":3506,"depth":82,"text":3507},{"id":3553,"depth":70,"text":3554},{"id":3694,"depth":70,"text":3695},"Rust's iterators are lazy, zero-cost, and compose into chains that compile down to tight loops. Mastering them is the difference between \"writing Rust\" and \"writing idiomatic Rust\".","md",{},"\u002Frust\u002F15-iterators",{"title":5,"description":3746},"rust\u002F15-iterators","jdGcxOUbF5X5qXadieo2qKvXsCeOWbYopQgOnSct-EQ",1785944093235]