Wektory struktur
Przechowa Pan/Pani złożone dane w Vec.
Wektory struktur to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.
Dlaczego wektory struktur
Wektory mogą przechowywać wartości dowolnego jednego typu, w tym własne struktury. Wartość Vec<Person> przechowuje wiele osób w określonej kolejności, co świetnie sprawdza się w przypadku list rekordów, takich jak użytkownicy, elementy czy wyniki.
Łączy to własne struktury danych z listą o zmiennej długości.
Definiowanie struktury
Najpierw należy zdefiniować strukturę, którą chcą Państwo przechowywać. Ta struktura Person ma imię i wiek.
Wiersz #[derive(Debug)] pozwala wyświetlać osobę za pomocą {:?}, co jest przydatne przy wyświetlaniu całych wektorów.
#[derive(Debug)]
struct Person {
name: String,
age: u32,
}Tworzenie wektora
Należy utworzyć instancje struktury, a następnie zebrać je w makrze vec!. Typ wektora automatycznie staje się Vec<Person>.
Użyj {:?}, aby wyświetlić wszystkie rekordy naraz.
#[derive(Debug)]
struct Person { name: String, age: u32 }
fn main() {
let people = vec![
Person { name: String::from("Ann"), age: 30 },
Person { name: String::from("Bo"), age: 25 },
];
println!("{:?}", people);
}Dodawanie struktur za pomocą push
Można też zacząć od pustego wektora i dodawać struktury pojedynczo za pomocą push. Aby można było go powiększać, wektor musi być oznaczony jako mut.
Ten wzorzec sprawdza się, gdy rekordy napływają z czasem, na przykład z danych wprowadzanych przez użytkownika.
#[derive(Debug)]
struct Item { name: String }
fn main() {
let mut cart = Vec::new();
cart.push(Item { name: String::from("Pen") });
cart.push(Item { name: String::from("Mug") });
println!("{:?}", cart);
}Iterowanie po rekordach
Iteruj po &people, aby odczytać każdą strukturę bez przejmowania własności. Wewnątrz pętli można uzyskać dostęp do pól za pomocą notacji kropkowej, na przykład p.name.
Spowoduje to wyświetlenie przyjaznego komunikatu dla każdego rekordu.
#[derive(Debug)]
struct Person { name: String, age: u32 }
fn main() {
let people = vec![
Person { name: String::from("Ann"), age: 30 },
Person { name: String::from("Bo"), age: 25 },
];
for p in &people {
println!("{} is {}", p.name, p.age);
}
}Odczytywanie pojedynczego pola
Użyj indeksu wektora, aby uzyskać dostęp do jednej struktury, a następnie użyj notacji kropkowej, aby odczytać jej pole. Zatem people[0].name zwraca imię pierwszej osoby.
Pamiętaj, że indeksy zaczynają się od 0, a dostęp poza zakresem powoduje panikę.
#[derive(Debug)]
struct Person { name: String, age: u32 }
fn main() {
let people = vec![
Person { name: String::from("Ann"), age: 30 },
];
println!("name: {}", people[0].name);
}Zmienianie wartości pola
Aby edytować rekord, wektor musi być oznaczony jako mut. Następnie należy uzyskać dostęp do struktury za pomocą indeksu i przypisać wartość jej polu, na przykład people[0].age = 31.
Aktualizuje to przechowywane dane bezpośrednio w miejscu.
struct Person { name: String, age: u32 }
fn main() {
let mut people = vec![
Person { name: String::from("Ann"), age: 30 },
];
people[0].age = 31;
println!("{}", people[0].age);
}Sumowanie wartości pola
Iteratory mogą pobrać jedno pole z każdego rekordu. W tym przykładzie iter().map(|p| p.age).sum() sumuje wszystkie wartości wieku.
Etap map zamienia każdą osobę tylko na jej wiek, zanim nastąpi sumowanie.
struct Person { name: String, age: u32 }
fn main() {
let people = vec![
Person { name: String::from("Ann"), age: 30 },
Person { name: String::from("Bo"), age: 20 },
];
let total: u32 = people.iter().map(|p| p.age).sum();
println!("total age = {}", total);
}Filtrowanie rekordów
Użyj iter().filter(...), aby zachować rekordy spełniające określoną regułę. Closure zwraca wartość typu bool dla każdej struktury.
W tym przykładzie zliczamy osoby w wieku co najmniej 30 lat.
struct Person { name: String, age: u32 }
fn main() {
let people = vec![
Person { name: String::from("Ann"), age: 30 },
Person { name: String::from("Bo"), age: 20 },
];
let adults = people.iter().filter(|p| p.age >= 30).count();
println!("adults: {}", adults);
}Sortowanie według pola
Sortuj rekordy według pola za pomocą sort_by_key. Przekaż closure zwracające wartość, według której ma odbywać się sortowanie, na przykład wiek.
Wektor musi być oznaczony jako mut, ponieważ sortowanie zmienia jego kolejność.
#[derive(Debug)]
struct Person { name: String, age: u32 }
fn main() {
let mut people = vec![
Person { name: String::from("Ann"), age: 30 },
Person { name: String::from("Bo"), age: 20 },
];
people.sort_by_key(|p| p.age);
println!("{:?}", people);
}Zliczanie rekordów
Liczbę przechowywanych struktur zwraca po prostu len(), tak jak w przypadku każdego wektora. Informuje ona, ile rekordów znajduje się obecnie w wektorze.
Połącz ją z is_empty(), aby sprawdzić, czy można bezpiecznie odczytać pierwszy rekord.
struct Item { name: String }
fn main() {
let cart = vec![
Item { name: String::from("Pen") },
Item { name: String::from("Mug") },
];
println!("items: {}", cart.len());
}Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat wektorów struktur.
Podsumowanie
Przechowywali Państwo struktury w Vec, tworzyli wektor za pomocą vec! i push, a także odczytywali i edytowali pola według indeksu oraz w pętlach.
Sumowali Państwo również wartości, filtrowali i sortowali rekordy według pola oraz je zliczali. Mogą już Państwo zarządzać listami uporządkowanych danych za pomocą wektorów.
Ucz się Rust dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 39
- Lekcje
- 144
Często zadawane pytania
Czy lekcja „Wektory struktur” jest bezpłatna?
Tak — pełny tekst „Wektory struktur” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.
Co nauczysz się w „Wektory struktur”?
Przechowa Pan/Pani złożone dane w Vec. Ćwiczysz Learn Rust Coding z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn Rust Coding?
Nie wymagamy żadnego doświadczenia. Learn Rust Coding w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wektory struktur”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn Rust Coding?
Tak. Każda lekcja Learn Rust Coding zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tworzenie i wypełnianie wektorów
- Indeksowanie i iterowanie
- Powiększanie i zmniejszanie
- Wektory struktur