Slices let you look at parts of a list or string without copying it. They help you work with smaller pieces easily.
When you want to use only a part of an array or string without making a new copy.
When you want to pass a section of data to a function safely and efficiently.
When you want to check or change a range of elements inside a list.
When you want to loop over a part of a collection instead of the whole thing.
Syntax
Rust
&array[start..end]
start is where the slice begins (inclusive).
end is where the slice stops (exclusive).
Examples
This takes elements from index 1 up to (but not including) 4, so elements 20, 30, 40.
Rust
let arr = [10, 20, 30, 40, 50];
let slice = &arr[1..4];
This slices the string from byte 1 to 3, so "ell".
Rust
let s = "hello";
let part = &s[1..4];
Slice from start to index 3 (exclusive), so elements 1, 2, 3.
Rust
let arr = [1, 2, 3, 4, 5];
let slice = &arr[..3];
Slice from index 2 to the end, so elements 3, 4, 5.
Rust
let arr = [1, 2, 3, 4, 5];
let slice = &arr[2..];
Sample Program
This program shows how to slice an array and a string. It prints the selected parts.
Rust
fn main() {
let numbers = [5, 10, 15, 20, 25];
let part = &numbers[1..4];
println!("Slice contains: {:?}", part);
let text = "rustacean";
let sub = &text[0..4];
println!("Slice of string: {}", sub);
}
OutputSuccess
Important Notes
Slices do not copy data, so they are fast and use less memory.
Slice indexes must be valid, or the program will panic (crash).
String slices must be on valid UTF-8 character boundaries to avoid errors.
Summary
Slices let you view parts of arrays or strings without copying.
Use &array[start..end] to get a slice from start to end - 1.
Slices are safe and efficient for working with parts of data.
Practice
(1/5)
1. What does the slice syntax &array[2..5] mean in Rust?
easy
A. It creates a view of elements from index 2 up to but not including 5.
B. It copies elements from index 2 to 5 inclusive into a new array.
C. It creates a slice starting at index 5 and ending at index 2.
D. It returns the element at index 2 only.
Solution
Step 1: Understand slice range syntax
The syntax start..end means from start index up to but not including end index.
Step 2: Apply to given slice
So &array[2..5] means elements at indices 2, 3, and 4 are included in the slice.
Final Answer:
It creates a view of elements from index 2 up to but not including 5. -> Option A
Quick Check:
Slice range excludes end index = A [OK]
Hint: Remember slice excludes the end index, like half-open intervals [OK]
Common Mistakes:
Thinking the slice copies elements instead of borrowing
Including the end index element in the slice
Confusing slice with single element access
2. Which of the following is the correct way to get a slice of the first 4 elements of an array named nums?
easy
A. &nums[1..4]
B. &nums[0..4]
C. &nums[0..5]
D. &nums[4..0]
Solution
Step 1: Identify slice start and end for first 4 elements
The first 4 elements are at indices 0, 1, 2, and 3, so slice should start at 0 and end at 4 (exclusive).
Step 2: Check options for correct syntax
&nums[0..4] uses &nums[0..4], which correctly slices elements 0 to 3.
Final Answer:
&nums[0..4] -> Option B
Quick Check:
Slice first 4 elements = &nums[0..4] [OK]
Hint: Start at 0, end at count for first N elements [OK]
Common Mistakes:
Starting slice at 1 instead of 0
Including one extra element by using end index too high
Using reversed range which is invalid
3. What is the output of this Rust code?
let arr = [10, 20, 30, 40, 50];
let slice = &arr[1..4];
println!("{:?}", slice);
medium
A. [20, 30, 40, 50]
B. [10, 20, 30, 40]
C. [20, 30, 40]
D. [30, 40, 50]
Solution
Step 1: Identify slice indices and elements
The slice &arr[1..4] includes elements at indices 1, 2, and 3, which are 20, 30, and 40.
Step 2: Understand print output
Printing the slice with {:?} shows the elements in array-like format.
Final Answer:
[20, 30, 40] -> Option C
Quick Check:
Slice arr[1..4] = [20, 30, 40] [OK]
Hint: Slice excludes end index, so count elements carefully [OK]
Common Mistakes:
Including element at index 4 mistakenly
Printing the whole array instead of slice
Confusing slice with copying elements
4. What is wrong with this Rust code?
let arr = [1, 2, 3, 4];
let slice = &arr[3..2];
medium
A. The slice start index is greater than the end index, causing a panic.
B. The slice syntax is correct and will return an empty slice.
C. The code will compile but slice will contain elements 3 and 2.
D. The slice must use parentheses instead of brackets.
Solution
Step 1: Analyze slice indices order
The slice &arr[3..2] has start index 3 and end index 2, which is invalid because start must be less than or equal to end.
Step 2: Understand Rust slice behavior
Rust panics at runtime if slice start is greater than end; it does not return empty slice or reorder indices.
Final Answer:
The slice start index is greater than the end index, causing a panic. -> Option A
Quick Check:
Slice start > end causes panic [OK]
Hint: Slice start must be ≤ end; else panic occurs [OK]
Common Mistakes:
Assuming reversed slice returns empty slice
Thinking slice silently swaps indices
Using parentheses instead of brackets for slices
5. Given a string let text = "hello world";, which slice expression extracts the word "world" correctly?
hard
A. &text[..5]
B. &text[5..10]
C. &text[6..10]
D. &text[6..]
Solution
Step 1: Identify indices of "world" in the string
"hello world" has "world" starting at index 6 and goes to the end (index 10 inclusive).
Step 2: Check slice options
&text[6..] uses &text[6..] which means from index 6 to the end, correctly extracting "world".
Final Answer:
&text[6..] -> Option D
Quick Check:
Slice from start index to end = &text[6..] [OK]
Hint: Use start.. to slice from start index to string end [OK]
Common Mistakes:
Using wrong end index excluding last character
Confusing byte indices with character indices (not in this example)
Using slice that extracts wrong substring
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.