rust / intermediate
Snippet
Slices und Bereichsoperationen
Slices sind Ansichten in zusammenhängende Sequenzen ohne Eigentum. Die &[T]-Syntax repräsentiert ein geliehenes Slice, während &mut [T] Modifikation erlaubt. Die Bereichssyntax [start..end] erstellt Unterslices mit exklusivem Endindex. Slices tragen einen Zeiger und eine Länge, was sie zu leichten Referenzen macht. Die contains-Methode prüft Zugehörigkeit, und iter() bietet Aufzählung. Slices ermöglichen flexible, null-Overhead-Abstraktionen über Sammlungen.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fn analyze_slice(slice: &[i32]) -> (usize, i32, i32) {let len = slice.len();let first = *slice.first().unwrap_or(&0);let last = *slice.last().unwrap_or(&0);(len, first, last)}fn main() {let arr = [10, 20, 30, 40, 50];let slice = &arr[1..4];println!("Slice: {:?}", slice);println!("Length: {}", slice.len());let (len, first, last) = analyze_slice(slice);println!("Analyzed: len={}, first={}, last={}", len, first, last);for (i, val) in arr.iter().enumerate() {print!("[{}:{}.{}] ", i, val, if arr[i..].contains(val) { "yes" } else { "no" });}}
Erklärung
1
&arr[1..4]
Erstellt Slice von Index 1 inklusiv bis 4 exklusiv, enthält [20, 30, 40]
2
fn analyze_slice(slice: &[i32])
Funktion nimmt geliehenes Slice, arbeitet mit jeder zusammenhängenden Sequenz
3
slice.len()
Konstantzeit-Längsenabruf ohne Iteration
4
*slice.first().unwrap_or(&0)
Sicher erstes Element oder Standardwert erhalten unter Verwendung von Zeiger-Dereferenzierung