Iterowanie z możliwością modyfikacji
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 12 z 66.
Czasami musisz zrobić więcej niż tylko odczytywać elementy wektora — musisz je modyfikować. W poprzedniej lekcji pokazano, jak iterować i odczytywać wartości, a w tej lekcji dowiesz się, jak zmieniać elementy podczas iteracji za pomocą referencji mutowalnych.
Aby modyfikować elementy podczas iterowania, musisz użyć &mut zamiast & w pętli for:
let mut numbers = vec![1, 2, 3, 4];
for number in &mut numbers {
*number = *number * 2;
}&mut numbers tworzy mutowalną referencję do wektora, a każda iteracja daje ci mutowalną referencję do pojedynczego elementu. Operator * (nazywany operatorem dereferencji) służy do uzyskiwania dostępu do rzeczywistej wartości, na którą wskazuje referencja, i jej modyfikowania.
Ten wzorzec jest niezwykle przydatny do przekształcania danych w miejscu. Zamiast tworzyć nowy wektor ze zmodyfikowanymi wartościami, możesz efektywnie zaktualizować istniejący. Wektor musi być zadeklarowany jako mut, aby to zadziałało, ponieważ zmieniasz jego zawartość.
Po wykonaniu powyższej pętli numbers zawierałaby [2, 4, 6, 8] — każdą pierwotną wartość podwojoną na miejscu.
Wyzwanie
ŁatwyNapisz funkcję add_ten_to_all, która przyjmuje mutowalny wektor numbers, dodaje 10 do każdego elementu bezpośrednio, a następnie zwraca zmodyfikowany wektor.
Użyj mutowalnej iteracji z &mut, aby bezpośrednio modyfikować każdy element. Pamiętaj, aby użyć operatora dereferencji *, by uzyskać dostęp do rzeczywistych wartości i je modyfikować.
Parametry:
numbers(Vec<i32>): mutowalny wektor liczb całkowitych do zmodyfikowania
Zwraca: zmodyfikowany wektor, w którym do każdego elementu dodano 10 (Vec<i32>)
Spróbuj swoich sił
fn add_ten_to_all(mut numbers: Vec<i32>) -> Vec<i32> {
// Wpisz tutaj kod
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kodPoćwicz samodzielnie: Kompilator Rust online