[{"data":1,"prerenderedAt":1968},["ShallowReactive",2],{"page-\u002Frust\u002F09-slices":3},{"id":4,"title":5,"body":6,"description":1961,"extension":1962,"meta":1963,"navigation":656,"path":1964,"seo":1965,"stem":1966,"__hash__":1967},"content\u002Frust\u002F09-slices.md","09 — Slices",{"type":7,"value":8,"toc":1943},"minimark",[9,13,22,27,160,179,186,191,316,320,369,418,428,480,491,574,578,842,851,870,874,952,955,959,1014,1019,1023,1085,1104,1108,1117,1243,1248,1257,1337,1343,1347,1444,1448,1906,1910,1936,1939],[10,11,5],"h1",{"id":12},"_09-slices",[14,15,16,17,21],"p",{},"A slice is a ",[18,19,20],"strong",{},"borrowed view"," into a contiguous sequence of elements. It's the most common way to pass \"a chunk of data\" without taking ownership.",[23,24,26],"h2",{"id":25},"the-slice-type","The Slice Type",[28,29,31],"code-wrapper",{"language":30},"rust",[32,33,37],"pre",{"className":34,"code":35,"language":30,"meta":36,"style":36},"language-rust shiki shiki-themes github-light github-dark","let arr = [1, 2, 3, 4, 5];\nlet s: &[i32] = &arr;          \u002F\u002F slice of the whole array\nlet part: &[i32] = &arr[1..4]; \u002F\u002F [2, 3, 4]\n","",[38,39,40,87,122],"code",{"__ignoreMap":36},[41,42,45,49,53,56,59,63,66,69,71,74,76,79,81,84],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"svdQ7","let",[41,50,52],{"class":51},"ssxIu"," arr ",[41,54,55],{"class":47},"=",[41,57,58],{"class":51}," [",[41,60,62],{"class":61},"snvgF","1",[41,64,65],{"class":51},", ",[41,67,68],{"class":61},"2",[41,70,65],{"class":51},[41,72,73],{"class":61},"3",[41,75,65],{"class":51},[41,77,78],{"class":61},"4",[41,80,65],{"class":51},[41,82,83],{"class":61},"5",[41,85,86],{"class":51},"];\n",[41,88,90,92,95,98,101,104,108,111,113,115,118],{"class":43,"line":89},2,[41,91,48],{"class":47},[41,93,94],{"class":51}," s",[41,96,97],{"class":47},":",[41,99,100],{"class":47}," &",[41,102,103],{"class":51},"[",[41,105,107],{"class":106},"sIsaT","i32",[41,109,110],{"class":51},"] ",[41,112,55],{"class":47},[41,114,100],{"class":47},[41,116,117],{"class":51},"arr;          ",[41,119,121],{"class":120},"sdCPZ","\u002F\u002F slice of the whole array\n",[41,123,125,127,130,132,134,136,138,140,142,144,147,149,152,154,157],{"class":43,"line":124},3,[41,126,48],{"class":47},[41,128,129],{"class":51}," part",[41,131,97],{"class":47},[41,133,100],{"class":47},[41,135,103],{"class":51},[41,137,107],{"class":106},[41,139,110],{"class":51},[41,141,55],{"class":47},[41,143,100],{"class":47},[41,145,146],{"class":51},"arr[",[41,148,62],{"class":61},[41,150,151],{"class":47},"..",[41,153,78],{"class":61},[41,155,156],{"class":51},"]; ",[41,158,159],{"class":120},"\u002F\u002F [2, 3, 4]\n",[14,161,162,163,166,167,170,171,174,175,178],{},"A slice ",[38,164,165],{},"&[T]"," is a ",[18,168,169],{},"fat pointer",": ",[38,172,173],{},"(pointer, length)",". Two ",[38,176,177],{},"usize"," worth of data on the stack. No ownership of the underlying elements.",[23,180,182,183],{"id":181},"string-slices-str","String Slices ",[38,184,185],{},"&str",[14,187,188,190],{},[38,189,185],{}," is a slice of UTF-8 bytes — same fat-pointer layout but with the UTF-8 invariant:",[28,192,193],{"language":30},[32,194,196],{"className":34,"code":195,"language":30,"meta":36,"style":36},"let s = String::from(\"hello, world\");\nlet hello: &str = &s[0..5];     \u002F\u002F \"hello\"\nlet world: &s[7..12];            \u002F\u002F \"world\"\nlet whole: &str = &s[..];        \u002F\u002F whole string\n",[38,197,198,226,261,288],{"__ignoreMap":36},[41,199,200,202,205,207,210,213,216,219,223],{"class":43,"line":44},[41,201,48],{"class":47},[41,203,204],{"class":51}," s ",[41,206,55],{"class":47},[41,208,209],{"class":106}," String",[41,211,212],{"class":47},"::",[41,214,215],{"class":106},"from",[41,217,218],{"class":51},"(",[41,220,222],{"class":221},"sJ6F3","\"hello, world\"",[41,224,225],{"class":51},");\n",[41,227,228,230,233,235,237,240,243,245,248,251,253,255,258],{"class":43,"line":89},[41,229,48],{"class":47},[41,231,232],{"class":51}," hello",[41,234,97],{"class":47},[41,236,100],{"class":47},[41,238,239],{"class":106},"str",[41,241,242],{"class":47}," =",[41,244,100],{"class":47},[41,246,247],{"class":51},"s[",[41,249,250],{"class":61},"0",[41,252,151],{"class":47},[41,254,83],{"class":61},[41,256,257],{"class":51},"];     ",[41,259,260],{"class":120},"\u002F\u002F \"hello\"\n",[41,262,263,265,268,270,272,274,277,279,282,285],{"class":43,"line":124},[41,264,48],{"class":47},[41,266,267],{"class":51}," world",[41,269,97],{"class":47},[41,271,100],{"class":47},[41,273,247],{"class":51},[41,275,276],{"class":61},"7",[41,278,151],{"class":47},[41,280,281],{"class":61},"12",[41,283,284],{"class":51},"];            ",[41,286,287],{"class":120},"\u002F\u002F \"world\"\n",[41,289,291,293,296,298,300,302,304,306,308,310,313],{"class":43,"line":290},4,[41,292,48],{"class":47},[41,294,295],{"class":51}," whole",[41,297,97],{"class":47},[41,299,100],{"class":47},[41,301,239],{"class":106},[41,303,242],{"class":47},[41,305,100],{"class":47},[41,307,247],{"class":51},[41,309,151],{"class":47},[41,311,312],{"class":51},"];        ",[41,314,315],{"class":120},"\u002F\u002F whole string\n",[23,317,319],{"id":318},"indexing-rules","Indexing Rules",[321,322,323,346,352,359],"ul",{},[324,325,326,329,330,333,334,329,337,333,340,329,342,345],"li",{},[38,327,328],{},"..n"," = ",[38,331,332],{},"0..n","; ",[38,335,336],{},"n..",[38,338,339],{},"n..len",[38,341,151],{},[38,343,344],{},"0..len",".",[324,347,348,351],{},[38,349,350],{},"..=k"," is inclusive.",[324,353,354,355,358],{},"Out-of-bounds slicing ",[18,356,357],{},"panics"," at runtime.",[324,360,361,362,365,366,368],{},"Slicing on a ",[18,363,364],{},"non-char boundary"," in a ",[38,367,185],{}," panics:",[28,370,371],{"language":30},[32,372,374],{"className":34,"code":373,"language":30,"meta":36,"style":36},"let s = \"hi🦀\";  \u002F\u002F '🦀' is 4 bytes\nlet bad = &s[2..4];   \u002F\u002F PANIC: byte index 2 is not a char boundary\n",[38,375,376,393],{"__ignoreMap":36},[41,377,378,380,382,384,387,390],{"class":43,"line":44},[41,379,48],{"class":47},[41,381,204],{"class":51},[41,383,55],{"class":47},[41,385,386],{"class":221}," \"hi🦀\"",[41,388,389],{"class":51},";  ",[41,391,392],{"class":120},"\u002F\u002F '🦀' is 4 bytes\n",[41,394,395,397,400,402,404,406,408,410,412,415],{"class":43,"line":89},[41,396,48],{"class":47},[41,398,399],{"class":51}," bad ",[41,401,55],{"class":47},[41,403,100],{"class":47},[41,405,247],{"class":51},[41,407,68],{"class":61},[41,409,151],{"class":47},[41,411,78],{"class":61},[41,413,414],{"class":51},"];   ",[41,416,417],{"class":120},"\u002F\u002F PANIC: byte index 2 is not a char boundary\n",[14,419,420,421,424,425,97],{},"To slice by char, use ",[38,422,423],{},".chars()"," \u002F ",[38,426,427],{},".char_indices()",[28,429,430],{"language":30},[32,431,433],{"className":34,"code":432,"language":30,"meta":36,"style":36},"let first_char_str: &str = s.split(0).next().unwrap();\n",[38,434,435],{"__ignoreMap":36},[41,436,437,439,442,444,446,448,450,452,454,457,459,461,464,466,469,472,474,477],{"class":43,"line":44},[41,438,48],{"class":47},[41,440,441],{"class":51}," first_char_str",[41,443,97],{"class":47},[41,445,100],{"class":47},[41,447,239],{"class":106},[41,449,242],{"class":47},[41,451,94],{"class":51},[41,453,345],{"class":47},[41,455,456],{"class":106},"split",[41,458,218],{"class":51},[41,460,250],{"class":61},[41,462,463],{"class":51},")",[41,465,345],{"class":47},[41,467,468],{"class":106},"next",[41,470,471],{"class":51},"()",[41,473,345],{"class":47},[41,475,476],{"class":106},"unwrap",[41,478,479],{"class":51},"();\n",[14,481,482,483,486,487,490],{},"Wait — ",[38,484,485],{},"str::split"," splits on a pattern. Use ",[38,488,489],{},"char_indices"," for safety:",[28,492,493],{"language":30},[32,494,496],{"className":34,"code":495,"language":30,"meta":36,"style":36},"let bytes_to = s.char_indices().nth(1).map(|(i, _)| i).unwrap();\nlet first: &str = &s[..bytes_to];\n",[38,497,498,550],{"__ignoreMap":36},[41,499,500,502,505,507,509,511,513,515,517,520,522,524,526,528,531,533,536,539,541,544,546,548],{"class":43,"line":44},[41,501,48],{"class":47},[41,503,504],{"class":51}," bytes_to ",[41,506,55],{"class":47},[41,508,94],{"class":51},[41,510,345],{"class":47},[41,512,489],{"class":106},[41,514,471],{"class":51},[41,516,345],{"class":47},[41,518,519],{"class":106},"nth",[41,521,218],{"class":51},[41,523,62],{"class":61},[41,525,463],{"class":51},[41,527,345],{"class":47},[41,529,530],{"class":106},"map",[41,532,218],{"class":51},[41,534,535],{"class":47},"|",[41,537,538],{"class":51},"(i, _)",[41,540,535],{"class":47},[41,542,543],{"class":51}," i)",[41,545,345],{"class":47},[41,547,476],{"class":106},[41,549,479],{"class":51},[41,551,552,554,557,559,561,563,565,567,569,571],{"class":43,"line":89},[41,553,48],{"class":47},[41,555,556],{"class":51}," first",[41,558,97],{"class":47},[41,560,100],{"class":47},[41,562,239],{"class":106},[41,564,242],{"class":47},[41,566,100],{"class":47},[41,568,247],{"class":51},[41,570,151],{"class":47},[41,572,573],{"class":51},"bytes_to];\n",[23,575,577],{"id":576},"creating-slices","Creating Slices",[28,579,580],{"language":30},[32,581,583],{"className":34,"code":582,"language":30,"meta":36,"style":36},"\u002F\u002F From Vec\nlet v = vec![1, 2, 3];\nlet s = &v[..];\nlet s = v.as_slice();\n\n\u002F\u002F From array\nlet a = [1, 2, 3];\nlet s = &a[..];\n\n\u002F\u002F From String\nlet st = String::from(\"hi\");\nlet s: &str = &st[..];\nlet s: &str = st.as_str();\n\n\u002F\u002F From raw parts (unsafe)\nlet s: &[u8] = unsafe { std::slice::from_raw_parts(ptr, len) };\n",[38,584,585,590,616,633,651,658,664,688,706,711,717,740,764,789,794,800],{"__ignoreMap":36},[41,586,587],{"class":43,"line":44},[41,588,589],{"class":120},"\u002F\u002F From Vec\n",[41,591,592,594,597,599,602,604,606,608,610,612,614],{"class":43,"line":89},[41,593,48],{"class":47},[41,595,596],{"class":51}," v ",[41,598,55],{"class":47},[41,600,601],{"class":106}," vec!",[41,603,103],{"class":51},[41,605,62],{"class":61},[41,607,65],{"class":51},[41,609,68],{"class":61},[41,611,65],{"class":51},[41,613,73],{"class":61},[41,615,86],{"class":51},[41,617,618,620,622,624,626,629,631],{"class":43,"line":124},[41,619,48],{"class":47},[41,621,204],{"class":51},[41,623,55],{"class":47},[41,625,100],{"class":47},[41,627,628],{"class":51},"v[",[41,630,151],{"class":47},[41,632,86],{"class":51},[41,634,635,637,639,641,644,646,649],{"class":43,"line":290},[41,636,48],{"class":47},[41,638,204],{"class":51},[41,640,55],{"class":47},[41,642,643],{"class":51}," v",[41,645,345],{"class":47},[41,647,648],{"class":106},"as_slice",[41,650,479],{"class":51},[41,652,654],{"class":43,"line":653},5,[41,655,657],{"emptyLinePlaceholder":656},true,"\n",[41,659,661],{"class":43,"line":660},6,[41,662,663],{"class":120},"\u002F\u002F From array\n",[41,665,667,669,672,674,676,678,680,682,684,686],{"class":43,"line":666},7,[41,668,48],{"class":47},[41,670,671],{"class":51}," a ",[41,673,55],{"class":47},[41,675,58],{"class":51},[41,677,62],{"class":61},[41,679,65],{"class":51},[41,681,68],{"class":61},[41,683,65],{"class":51},[41,685,73],{"class":61},[41,687,86],{"class":51},[41,689,691,693,695,697,699,702,704],{"class":43,"line":690},8,[41,692,48],{"class":47},[41,694,204],{"class":51},[41,696,55],{"class":47},[41,698,100],{"class":47},[41,700,701],{"class":51},"a[",[41,703,151],{"class":47},[41,705,86],{"class":51},[41,707,709],{"class":43,"line":708},9,[41,710,657],{"emptyLinePlaceholder":656},[41,712,714],{"class":43,"line":713},10,[41,715,716],{"class":120},"\u002F\u002F From String\n",[41,718,720,722,725,727,729,731,733,735,738],{"class":43,"line":719},11,[41,721,48],{"class":47},[41,723,724],{"class":51}," st ",[41,726,55],{"class":47},[41,728,209],{"class":106},[41,730,212],{"class":47},[41,732,215],{"class":106},[41,734,218],{"class":51},[41,736,737],{"class":221},"\"hi\"",[41,739,225],{"class":51},[41,741,743,745,747,749,751,753,755,757,760,762],{"class":43,"line":742},12,[41,744,48],{"class":47},[41,746,94],{"class":51},[41,748,97],{"class":47},[41,750,100],{"class":47},[41,752,239],{"class":106},[41,754,242],{"class":47},[41,756,100],{"class":47},[41,758,759],{"class":51},"st[",[41,761,151],{"class":47},[41,763,86],{"class":51},[41,765,767,769,771,773,775,777,779,782,784,787],{"class":43,"line":766},13,[41,768,48],{"class":47},[41,770,94],{"class":51},[41,772,97],{"class":47},[41,774,100],{"class":47},[41,776,239],{"class":106},[41,778,242],{"class":47},[41,780,781],{"class":51}," st",[41,783,345],{"class":47},[41,785,786],{"class":106},"as_str",[41,788,479],{"class":51},[41,790,792],{"class":43,"line":791},14,[41,793,657],{"emptyLinePlaceholder":656},[41,795,797],{"class":43,"line":796},15,[41,798,799],{"class":120},"\u002F\u002F From raw parts (unsafe)\n",[41,801,803,805,807,809,811,813,816,818,820,823,826,829,831,834,836,839],{"class":43,"line":802},16,[41,804,48],{"class":47},[41,806,94],{"class":51},[41,808,97],{"class":47},[41,810,100],{"class":47},[41,812,103],{"class":51},[41,814,815],{"class":106},"u8",[41,817,110],{"class":51},[41,819,55],{"class":47},[41,821,822],{"class":47}," unsafe",[41,824,825],{"class":51}," { ",[41,827,828],{"class":106},"std",[41,830,212],{"class":47},[41,832,833],{"class":106},"slice",[41,835,212],{"class":47},[41,837,838],{"class":106},"from_raw_parts",[41,840,841],{"class":51},"(ptr, len) };\n",[23,843,845,847,848],{"id":844},"t-vs-t-n",[38,846,165],{}," vs ",[38,849,850],{},"&[T; N]",[321,852,853,858,863],{},[324,854,855,857],{},[38,856,165],{}," is the slice type (dynamically sized).",[324,859,860,862],{},[38,861,850],{}," is a reference to a fixed-size array (size known at compile time).",[324,864,865,867,868,345],{},[38,866,850],{}," coerces to ",[38,869,165],{},[23,871,873],{"id":872},"mutable-slices","Mutable Slices",[28,875,876],{"language":30},[32,877,879],{"className":34,"code":878,"language":30,"meta":36,"style":36},"let mut v = vec![1, 2, 3];\nlet s: &mut [i32] = &mut v[..];\ns[0] = 99;\n",[38,880,881,908,936],{"__ignoreMap":36},[41,882,883,885,888,890,892,894,896,898,900,902,904,906],{"class":43,"line":44},[41,884,48],{"class":47},[41,886,887],{"class":47}," mut",[41,889,596],{"class":51},[41,891,55],{"class":47},[41,893,601],{"class":106},[41,895,103],{"class":51},[41,897,62],{"class":61},[41,899,65],{"class":51},[41,901,68],{"class":61},[41,903,65],{"class":51},[41,905,73],{"class":61},[41,907,86],{"class":51},[41,909,910,912,914,916,919,921,923,925,927,929,932,934],{"class":43,"line":89},[41,911,48],{"class":47},[41,913,94],{"class":51},[41,915,97],{"class":47},[41,917,918],{"class":47}," &mut",[41,920,58],{"class":51},[41,922,107],{"class":106},[41,924,110],{"class":51},[41,926,55],{"class":47},[41,928,918],{"class":47},[41,930,931],{"class":51}," v[",[41,933,151],{"class":47},[41,935,86],{"class":51},[41,937,938,940,942,944,946,949],{"class":43,"line":124},[41,939,247],{"class":51},[41,941,250],{"class":61},[41,943,110],{"class":51},[41,945,55],{"class":47},[41,947,948],{"class":61}," 99",[41,950,951],{"class":51},";\n",[14,953,954],{},"One mutable slice at a time (borrow rules still apply).",[23,956,958],{"id":957},"splitting-slices","Splitting Slices",[28,960,961],{"language":30},[32,962,964],{"className":34,"code":963,"language":30,"meta":36,"style":36},"let (left, right) = s.split_first();   \u002F\u002F Option\u003C(&T, &[T])>\nlet (mut_left, mut_right) = s.split_at_mut(2);   \u002F\u002F (&mut [T], &mut [T])\n",[38,965,966,988],{"__ignoreMap":36},[41,967,968,970,973,975,977,979,982,985],{"class":43,"line":44},[41,969,48],{"class":47},[41,971,972],{"class":51}," (left, right) ",[41,974,55],{"class":47},[41,976,94],{"class":51},[41,978,345],{"class":47},[41,980,981],{"class":106},"split_first",[41,983,984],{"class":51},"();   ",[41,986,987],{"class":120},"\u002F\u002F Option\u003C(&T, &[T])>\n",[41,989,990,992,995,997,999,1001,1004,1006,1008,1011],{"class":43,"line":89},[41,991,48],{"class":47},[41,993,994],{"class":51}," (mut_left, mut_right) ",[41,996,55],{"class":47},[41,998,94],{"class":51},[41,1000,345],{"class":47},[41,1002,1003],{"class":106},"split_at_mut",[41,1005,218],{"class":51},[41,1007,68],{"class":61},[41,1009,1010],{"class":51},");   ",[41,1012,1013],{"class":120},"\u002F\u002F (&mut [T], &mut [T])\n",[14,1015,1016,1018],{},[38,1017,1003],{}," is the canonical way to get two non-overlapping mutable subslices — the compiler can't otherwise prove disjointness.",[23,1020,1022],{"id":1021},"iteration","Iteration",[28,1024,1025],{"language":30},[32,1026,1028],{"className":34,"code":1027,"language":30,"meta":36,"style":36},"for x in &arr { \u002F* x: &i32 *\u002F }\nfor x in &mut arr { \u002F* x: &mut i32 *\u002F }\nfor x in arr { \u002F* x: i32 — consumes (Copy ok) *\u002F }\n",[38,1029,1030,1052,1070],{"__ignoreMap":36},[41,1031,1032,1035,1038,1041,1043,1046,1049],{"class":43,"line":44},[41,1033,1034],{"class":47},"for",[41,1036,1037],{"class":51}," x ",[41,1039,1040],{"class":47},"in",[41,1042,100],{"class":47},[41,1044,1045],{"class":51},"arr { ",[41,1047,1048],{"class":120},"\u002F* x: &i32 *\u002F",[41,1050,1051],{"class":51}," }\n",[41,1053,1054,1056,1058,1060,1062,1065,1068],{"class":43,"line":89},[41,1055,1034],{"class":47},[41,1057,1037],{"class":51},[41,1059,1040],{"class":47},[41,1061,918],{"class":47},[41,1063,1064],{"class":51}," arr { ",[41,1066,1067],{"class":120},"\u002F* x: &mut i32 *\u002F",[41,1069,1051],{"class":51},[41,1071,1072,1074,1076,1078,1080,1083],{"class":43,"line":124},[41,1073,1034],{"class":47},[41,1075,1037],{"class":51},[41,1077,1040],{"class":47},[41,1079,1064],{"class":51},[41,1081,1082],{"class":120},"\u002F* x: i32 — consumes (Copy ok) *\u002F",[41,1084,1051],{"class":51},[14,1086,1087,1089,1090,1093,1094,1097,1098,424,1101,345],{},[38,1088,165],{}," and ",[38,1091,1092],{},"&mut [T]"," implement ",[38,1095,1096],{},"IntoIterator"," yielding ",[38,1099,1100],{},"&T",[38,1102,1103],{},"&mut T",[23,1105,1107],{"id":1106},"why-slices-matter-for-apis","Why Slices Matter for APIs",[14,1109,1110,1111,1113,1114,97],{},"Take ",[38,1112,165],{}," not ",[38,1115,1116],{},"&Vec\u003CT>",[28,1118,1119],{"language":30},[32,1120,1122],{"className":34,"code":1121,"language":30,"meta":36,"style":36},"fn sum(nums: &[i32]) -> i32 {\n    nums.iter().sum()\n}\nsum(&vec![1, 2, 3]);\nsum(&[1, 2, 3]);\nsum(&arr);            \u002F\u002F works for arrays too\n",[38,1123,1124,1155,1175,1180,1207,1229],{"__ignoreMap":36},[41,1125,1126,1129,1132,1135,1137,1139,1141,1143,1146,1149,1152],{"class":43,"line":44},[41,1127,1128],{"class":47},"fn",[41,1130,1131],{"class":106}," sum",[41,1133,1134],{"class":51},"(nums",[41,1136,97],{"class":47},[41,1138,100],{"class":47},[41,1140,103],{"class":51},[41,1142,107],{"class":106},[41,1144,1145],{"class":51},"]) ",[41,1147,1148],{"class":47},"->",[41,1150,1151],{"class":106}," i32",[41,1153,1154],{"class":51}," {\n",[41,1156,1157,1160,1162,1165,1167,1169,1172],{"class":43,"line":89},[41,1158,1159],{"class":51},"    nums",[41,1161,345],{"class":47},[41,1163,1164],{"class":106},"iter",[41,1166,471],{"class":51},[41,1168,345],{"class":47},[41,1170,1171],{"class":106},"sum",[41,1173,1174],{"class":51},"()\n",[41,1176,1177],{"class":43,"line":124},[41,1178,1179],{"class":51},"}\n",[41,1181,1182,1184,1186,1189,1192,1194,1196,1198,1200,1202,1204],{"class":43,"line":290},[41,1183,1171],{"class":106},[41,1185,218],{"class":51},[41,1187,1188],{"class":47},"&",[41,1190,1191],{"class":106},"vec!",[41,1193,103],{"class":51},[41,1195,62],{"class":61},[41,1197,65],{"class":51},[41,1199,68],{"class":61},[41,1201,65],{"class":51},[41,1203,73],{"class":61},[41,1205,1206],{"class":51},"]);\n",[41,1208,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227],{"class":43,"line":653},[41,1210,1171],{"class":106},[41,1212,218],{"class":51},[41,1214,1188],{"class":47},[41,1216,103],{"class":51},[41,1218,62],{"class":61},[41,1220,65],{"class":51},[41,1222,68],{"class":61},[41,1224,65],{"class":51},[41,1226,73],{"class":61},[41,1228,1206],{"class":51},[41,1230,1231,1233,1235,1237,1240],{"class":43,"line":660},[41,1232,1171],{"class":106},[41,1234,218],{"class":51},[41,1236,1188],{"class":47},[41,1238,1239],{"class":51},"arr);            ",[41,1241,1242],{"class":120},"\u002F\u002F works for arrays too\n",[14,1244,1245,1247],{},[38,1246,165],{}," is the most general borrowed form.",[23,1249,1251,847,1253,1256],{"id":1250},"str-vs-string-api-choice",[38,1252,185],{},[38,1254,1255],{},"String"," API Choice",[28,1258,1259],{"language":30},[32,1260,1262],{"className":34,"code":1261,"language":30,"meta":36,"style":36},"fn print(s: &str) { println!(\"{s}\"); }\nprint(\"literal\");          \u002F\u002F &str\nprint(&owned_string);      \u002F\u002F &String -> &str\nprint(&substring);         \u002F\u002F &str\n",[38,1263,1264,1294,1310,1324],{"__ignoreMap":36},[41,1265,1266,1268,1271,1274,1276,1278,1280,1283,1286,1288,1291],{"class":43,"line":44},[41,1267,1128],{"class":47},[41,1269,1270],{"class":106}," print",[41,1272,1273],{"class":51},"(s",[41,1275,97],{"class":47},[41,1277,100],{"class":47},[41,1279,239],{"class":106},[41,1281,1282],{"class":51},") { ",[41,1284,1285],{"class":106},"println!",[41,1287,218],{"class":51},[41,1289,1290],{"class":221},"\"{s}\"",[41,1292,1293],{"class":51},"); }\n",[41,1295,1296,1299,1301,1304,1307],{"class":43,"line":89},[41,1297,1298],{"class":106},"print",[41,1300,218],{"class":51},[41,1302,1303],{"class":221},"\"literal\"",[41,1305,1306],{"class":51},");          ",[41,1308,1309],{"class":120},"\u002F\u002F &str\n",[41,1311,1312,1314,1316,1318,1321],{"class":43,"line":124},[41,1313,1298],{"class":106},[41,1315,218],{"class":51},[41,1317,1188],{"class":47},[41,1319,1320],{"class":51},"owned_string);      ",[41,1322,1323],{"class":120},"\u002F\u002F &String -> &str\n",[41,1325,1326,1328,1330,1332,1335],{"class":43,"line":290},[41,1327,1298],{"class":106},[41,1329,218],{"class":51},[41,1331,1188],{"class":47},[41,1333,1334],{"class":51},"substring);         ",[41,1336,1309],{"class":120},[14,1338,1339,1340,1342],{},"Always prefer ",[38,1341,185],{}," in function parameters unless you need to grow the string.",[23,1344,1346],{"id":1345},"edge-cases","Edge Cases",[321,1348,1349,1358,1367,1385,1397,1407,1418],{},[324,1350,1351,170,1354,1357],{},[18,1352,1353],{},"Empty slice",[38,1355,1356],{},"&arr[0..0]"," is valid, length 0; never panics.",[324,1359,1360,170,1363,1366],{},[18,1361,1362],{},"Slicing past end",[38,1364,1365],{},"&v[..v.len() + 1]"," panics.",[324,1368,1369,1377,1378,424,1381,1384],{},[18,1370,1371,424,1374],{},[38,1372,1373],{},"slice.get(i)",[38,1375,1376],{},"slice.get_mut(i)",": returns ",[38,1379,1380],{},"Option\u003C&T>",[38,1382,1383],{},"Option\u003C&mut T>"," — non-panicking indexing.",[324,1386,1387,1392,1393,1396],{},[18,1388,1389],{},[38,1390,1391],{},"slice.get_unchecked(i)",": unsafe — skips bounds check (only correct when you've proven ",[38,1394,1395],{},"i \u003C len",").",[324,1398,1399,1402,1403,1406],{},[18,1400,1401],{},"Range patterns",": limited; stable Rust allows ",[38,1404,1405],{},"[a, b, ..]"," only in limited forms.",[324,1408,1409,1414,1415,345],{},[18,1410,1411],{},[38,1412,1413],{},"Vec::drain",": takes a range, removes and returns an iterator — modifies the ",[38,1416,1417],{},"Vec",[324,1419,1420,1423,1424,1427,1428,1430,1431,1433,1434,1437,1438,1441,1442,1396],{},[18,1421,1422],{},"String slicing pitfall",": indexing ",[38,1425,1426],{},"s[i]"," is intentionally not allowed for ",[38,1429,1255],{},"\u002F",[38,1432,185],{}," because UTF-8 byte indexing is meaningless. Use ",[38,1435,1436],{},"s.chars().nth(i)"," or ",[38,1439,1440],{},"s.as_bytes()[i]"," (returns ",[38,1443,815],{},[23,1445,1447],{"id":1446},"slice-methods-cheat-sheet","Slice Methods Cheat Sheet",[28,1449,1450],{"language":30},[32,1451,1453],{"className":34,"code":1452,"language":30,"meta":36,"style":36},"s.len();\ns.is_empty();\ns.first();             \u002F\u002F Option\u003C&T>\ns.last();\ns.split_first();       \u002F\u002F Option\u003C(&T, &[T])>\ns.iter() \u002F s.iter_mut();\ns.windows(2);          \u002F\u002F sliding windows\ns.chunks(3);           \u002F\u002F non-overlapping chunks\ns.chunks_exact(3);\ns.split(|x| *x == 0);\ns.splitn(2, |x| *x == 0);\ns.contains(&3);\ns.starts_with(&[1, 2]);\ns.ends_with(&[4, 5]);\ns.iter().position(|x| *x == 3);\ns.binary_search(&3);\ns.sort();\ns.sort_by(|a, b| b.cmp(a));\ns.sort_by_key(|x| x.abs());\ns.reverse();\ns.rotate_left(1);\ns.copy_within(0..3, 5);\ns.fill(0);\n",[38,1454,1455,1467,1478,1493,1504,1517,1539,1557,1576,1591,1622,1653,1670,1693,1716,1750,1767,1779,1809,1838,1850,1866,1890],{"__ignoreMap":36},[41,1456,1457,1460,1462,1465],{"class":43,"line":44},[41,1458,1459],{"class":51},"s",[41,1461,345],{"class":47},[41,1463,1464],{"class":106},"len",[41,1466,479],{"class":51},[41,1468,1469,1471,1473,1476],{"class":43,"line":89},[41,1470,1459],{"class":51},[41,1472,345],{"class":47},[41,1474,1475],{"class":106},"is_empty",[41,1477,479],{"class":51},[41,1479,1480,1482,1484,1487,1490],{"class":43,"line":124},[41,1481,1459],{"class":51},[41,1483,345],{"class":47},[41,1485,1486],{"class":106},"first",[41,1488,1489],{"class":51},"();             ",[41,1491,1492],{"class":120},"\u002F\u002F Option\u003C&T>\n",[41,1494,1495,1497,1499,1502],{"class":43,"line":290},[41,1496,1459],{"class":51},[41,1498,345],{"class":47},[41,1500,1501],{"class":106},"last",[41,1503,479],{"class":51},[41,1505,1506,1508,1510,1512,1515],{"class":43,"line":653},[41,1507,1459],{"class":51},[41,1509,345],{"class":47},[41,1511,981],{"class":106},[41,1513,1514],{"class":51},"();       ",[41,1516,987],{"class":120},[41,1518,1519,1521,1523,1525,1528,1530,1532,1534,1537],{"class":43,"line":660},[41,1520,1459],{"class":51},[41,1522,345],{"class":47},[41,1524,1164],{"class":106},[41,1526,1527],{"class":51},"() ",[41,1529,1430],{"class":47},[41,1531,94],{"class":51},[41,1533,345],{"class":47},[41,1535,1536],{"class":106},"iter_mut",[41,1538,479],{"class":51},[41,1540,1541,1543,1545,1548,1550,1552,1554],{"class":43,"line":666},[41,1542,1459],{"class":51},[41,1544,345],{"class":47},[41,1546,1547],{"class":106},"windows",[41,1549,218],{"class":51},[41,1551,68],{"class":61},[41,1553,1306],{"class":51},[41,1555,1556],{"class":120},"\u002F\u002F sliding windows\n",[41,1558,1559,1561,1563,1566,1568,1570,1573],{"class":43,"line":690},[41,1560,1459],{"class":51},[41,1562,345],{"class":47},[41,1564,1565],{"class":106},"chunks",[41,1567,218],{"class":51},[41,1569,73],{"class":61},[41,1571,1572],{"class":51},");           ",[41,1574,1575],{"class":120},"\u002F\u002F non-overlapping chunks\n",[41,1577,1578,1580,1582,1585,1587,1589],{"class":43,"line":708},[41,1579,1459],{"class":51},[41,1581,345],{"class":47},[41,1583,1584],{"class":106},"chunks_exact",[41,1586,218],{"class":51},[41,1588,73],{"class":61},[41,1590,225],{"class":51},[41,1592,1593,1595,1597,1599,1601,1603,1606,1608,1611,1614,1617,1620],{"class":43,"line":713},[41,1594,1459],{"class":51},[41,1596,345],{"class":47},[41,1598,456],{"class":106},[41,1600,218],{"class":51},[41,1602,535],{"class":47},[41,1604,1605],{"class":51},"x",[41,1607,535],{"class":47},[41,1609,1610],{"class":47}," *",[41,1612,1613],{"class":51},"x ",[41,1615,1616],{"class":47},"==",[41,1618,1619],{"class":61}," 0",[41,1621,225],{"class":51},[41,1623,1624,1626,1628,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651],{"class":43,"line":719},[41,1625,1459],{"class":51},[41,1627,345],{"class":47},[41,1629,1630],{"class":106},"splitn",[41,1632,218],{"class":51},[41,1634,68],{"class":61},[41,1636,65],{"class":51},[41,1638,535],{"class":47},[41,1640,1605],{"class":51},[41,1642,535],{"class":47},[41,1644,1610],{"class":47},[41,1646,1613],{"class":51},[41,1648,1616],{"class":47},[41,1650,1619],{"class":61},[41,1652,225],{"class":51},[41,1654,1655,1657,1659,1662,1664,1666,1668],{"class":43,"line":742},[41,1656,1459],{"class":51},[41,1658,345],{"class":47},[41,1660,1661],{"class":106},"contains",[41,1663,218],{"class":51},[41,1665,1188],{"class":47},[41,1667,73],{"class":61},[41,1669,225],{"class":51},[41,1671,1672,1674,1676,1679,1681,1683,1685,1687,1689,1691],{"class":43,"line":766},[41,1673,1459],{"class":51},[41,1675,345],{"class":47},[41,1677,1678],{"class":106},"starts_with",[41,1680,218],{"class":51},[41,1682,1188],{"class":47},[41,1684,103],{"class":51},[41,1686,62],{"class":61},[41,1688,65],{"class":51},[41,1690,68],{"class":61},[41,1692,1206],{"class":51},[41,1694,1695,1697,1699,1702,1704,1706,1708,1710,1712,1714],{"class":43,"line":791},[41,1696,1459],{"class":51},[41,1698,345],{"class":47},[41,1700,1701],{"class":106},"ends_with",[41,1703,218],{"class":51},[41,1705,1188],{"class":47},[41,1707,103],{"class":51},[41,1709,78],{"class":61},[41,1711,65],{"class":51},[41,1713,83],{"class":61},[41,1715,1206],{"class":51},[41,1717,1718,1720,1722,1724,1726,1728,1731,1733,1735,1737,1739,1741,1743,1745,1748],{"class":43,"line":796},[41,1719,1459],{"class":51},[41,1721,345],{"class":47},[41,1723,1164],{"class":106},[41,1725,471],{"class":51},[41,1727,345],{"class":47},[41,1729,1730],{"class":106},"position",[41,1732,218],{"class":51},[41,1734,535],{"class":47},[41,1736,1605],{"class":51},[41,1738,535],{"class":47},[41,1740,1610],{"class":47},[41,1742,1613],{"class":51},[41,1744,1616],{"class":47},[41,1746,1747],{"class":61}," 3",[41,1749,225],{"class":51},[41,1751,1752,1754,1756,1759,1761,1763,1765],{"class":43,"line":802},[41,1753,1459],{"class":51},[41,1755,345],{"class":47},[41,1757,1758],{"class":106},"binary_search",[41,1760,218],{"class":51},[41,1762,1188],{"class":47},[41,1764,73],{"class":61},[41,1766,225],{"class":51},[41,1768,1770,1772,1774,1777],{"class":43,"line":1769},17,[41,1771,1459],{"class":51},[41,1773,345],{"class":47},[41,1775,1776],{"class":106},"sort",[41,1778,479],{"class":51},[41,1780,1782,1784,1786,1789,1791,1793,1796,1798,1801,1803,1806],{"class":43,"line":1781},18,[41,1783,1459],{"class":51},[41,1785,345],{"class":47},[41,1787,1788],{"class":106},"sort_by",[41,1790,218],{"class":51},[41,1792,535],{"class":47},[41,1794,1795],{"class":51},"a, b",[41,1797,535],{"class":47},[41,1799,1800],{"class":51}," b",[41,1802,345],{"class":47},[41,1804,1805],{"class":106},"cmp",[41,1807,1808],{"class":51},"(a));\n",[41,1810,1812,1814,1816,1819,1821,1823,1825,1827,1830,1832,1835],{"class":43,"line":1811},19,[41,1813,1459],{"class":51},[41,1815,345],{"class":47},[41,1817,1818],{"class":106},"sort_by_key",[41,1820,218],{"class":51},[41,1822,535],{"class":47},[41,1824,1605],{"class":51},[41,1826,535],{"class":47},[41,1828,1829],{"class":51}," x",[41,1831,345],{"class":47},[41,1833,1834],{"class":106},"abs",[41,1836,1837],{"class":51},"());\n",[41,1839,1841,1843,1845,1848],{"class":43,"line":1840},20,[41,1842,1459],{"class":51},[41,1844,345],{"class":47},[41,1846,1847],{"class":106},"reverse",[41,1849,479],{"class":51},[41,1851,1853,1855,1857,1860,1862,1864],{"class":43,"line":1852},21,[41,1854,1459],{"class":51},[41,1856,345],{"class":47},[41,1858,1859],{"class":106},"rotate_left",[41,1861,218],{"class":51},[41,1863,62],{"class":61},[41,1865,225],{"class":51},[41,1867,1869,1871,1873,1876,1878,1880,1882,1884,1886,1888],{"class":43,"line":1868},22,[41,1870,1459],{"class":51},[41,1872,345],{"class":47},[41,1874,1875],{"class":106},"copy_within",[41,1877,218],{"class":51},[41,1879,250],{"class":61},[41,1881,151],{"class":47},[41,1883,73],{"class":61},[41,1885,65],{"class":51},[41,1887,83],{"class":61},[41,1889,225],{"class":51},[41,1891,1893,1895,1897,1900,1902,1904],{"class":43,"line":1892},23,[41,1894,1459],{"class":51},[41,1896,345],{"class":47},[41,1898,1899],{"class":106},"fill",[41,1901,218],{"class":51},[41,1903,250],{"class":61},[41,1905,225],{"class":51},[23,1907,1909],{"id":1908},"summary","Summary",[321,1911,1912,1915,1923,1931],{},[324,1913,1914],{},"Slices are borrowed, fat-pointer views into contiguous data.",[324,1916,1917,1919,1920,1922],{},[38,1918,185],{}," is a UTF-8 slice; ",[38,1921,165],{}," is a generic slice.",[324,1924,1925,1926,424,1928,1930],{},"Use ",[38,1927,165],{},[38,1929,185],{}," in APIs for maximum generality.",[324,1932,1933,1934,345],{},"Split at mutable boundaries with ",[38,1935,1003],{},[14,1937,1938],{},"Next: Lifetimes — the borrow checker's vocabulary.",[1940,1941,1942],"style",{},"html pre.shiki code .svdQ7, html code.shiki .svdQ7{--shiki-default:#D73A49;--shiki-github-dark:#F97583}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 .sIsaT, html code.shiki .sIsaT{--shiki-default:#6F42C1;--shiki-github-dark:#B392F0}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":36,"searchDepth":89,"depth":89,"links":1944},[1945,1946,1948,1949,1950,1952,1953,1954,1955,1956,1958,1959,1960],{"id":25,"depth":89,"text":26},{"id":181,"depth":89,"text":1947},"String Slices &str",{"id":318,"depth":89,"text":319},{"id":576,"depth":89,"text":577},{"id":844,"depth":89,"text":1951},"&[T] vs &[T; N]",{"id":872,"depth":89,"text":873},{"id":957,"depth":89,"text":958},{"id":1021,"depth":89,"text":1022},{"id":1106,"depth":89,"text":1107},{"id":1250,"depth":89,"text":1957},"&str vs String API Choice",{"id":1345,"depth":89,"text":1346},{"id":1446,"depth":89,"text":1447},{"id":1908,"depth":89,"text":1909},"A slice is a borrowed view into a contiguous sequence of elements. It's the most common way to pass \"a chunk of data\" without taking ownership.","md",{},"\u002Frust\u002F09-slices",{"title":5,"description":1961},"rust\u002F09-slices","9PGVJuq6qX8CXqqmJq22-e4lYyxKd3fN_jkv718VD8M",1785944093218]