Learn Rust Coding · Ders

Struct Vektörleri

Karmaşık verileri bir Vec içinde tutun.

4. ders / 413 adım

Struct Vektörleri, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.

Why Vectors of Structs

Vektörler, kendi struct'larınız dahil olmak üzere herhangi tek bir türü barındırabilir. Bir Vec<Person>, birçok kişiyi sırayla saklar; bu da kullanıcılar, öğeler veya skorlar gibi kayıt listeleri için harikadır.

Bu, özel veri yapılarını boyutu artırılabilir bir listeyle birleştirir.

Defining a Struct

Öncelikle saklamak istediğiniz struct'ı tanımlayın. Bu Person bir isme ve yaşa sahip.

#[derive(Debug)] satırı, bir kişiyi {:?} ile yazdırmamızı sağlar; bu, vektörlerin tamamı için oldukça kullanışlıdır.

#[derive(Debug)]
struct Person {
    name: String,
    age: u32,
}

Building the Vector

Struct örnekleri oluşturun, ardından bunları vec! makrosunda toplayın. Vektörün tipi otomatik olarak Vec<Person> olur.

Tüm kayıtları aynı anda yazdırmak için {:?} kullanın.

#[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);
}

Yapıları Eklemek

Ayrıca boş başlayıp yapıları birer birer push edebilirsiniz. Vektörün büyüyebilmesi için mut olması gerekir.

Bu yaklaşım, kullanıcı girdisi gibi kayıtların zaman içinde geldiği durumlara uygundur.

#[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);
}

Kayıtlar Üzerinde Döngü Kurma

Sahipliği almadan her yapıyı okumak için &people üzerinde döngü kurun. Döngünün içinde alanlara p.name gibi nokta gösterimiyle erişirsiniz.

Bu, her kayıt için anlaşılır bir satır yazdırır.

#[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);
    }
}

Tek Bir Alanı Okuma

Bir yapıya ulaşmak için vektörü indeksleyin, ardından alanı için nokta gösterimini kullanın. Böylece people[0].name ilk kişinin adını verir.

İndekslerin 0'dan başladığını ve aralık dışı erişimin paniğe yol açtığını unutmayın.

#[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);
}

Bir Alanı Değiştirme

Bir kaydı düzenlemek için vektörün mut olması gerekir. Ardından yapıyı indeksleyip people[0].age = 31 örneğindeki gibi alanına bir değer atayın.

Bu, saklanan veriyi yerinde günceller.

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);
}

Bir Alanı Toplama

Yineleyiciler her kayıttan tek bir alan alabilir. Buradaki iter().map(|p| p.age).sum() ifadesi tüm yaşları toplar.

map adımı, toplama işleminden önce her kişiyi yalnızca yaşa dönüştürür.

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);
}

Kayıtları Filtreleme

Bir kurala uyan kayıtları tutmak için iter().filter(...) kullanın. Kapanış, her yapı için bir bool döndürür.

Burada en az 30 yaşında olan kaç kişi bulunduğunu sayıyoruz.

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);
}

Bir Alana Göre Sıralama

Kayıtları bir alana göre sort_by_key ile sıralayın. Buna, yaş gibi sıralama ölçütü olacak değeri döndüren bir kapanış verin.

Sıralama vektörün düzenini değiştirdiği için vektörün mut olması gerekir.

#[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);
}

Kayıtları Sayma

Saklanan yapıların sayısı, her vektörde olduğu gibi basitçe len() değeridir. Bu, şu anda kaç kayıt tuttuğunuzu gösterir.

İlk kaydı okumadan önce denetim yapmak için bunu is_empty() ile birlikte kullanın.

struct Item { name: String }

fn main() {
    let cart = vec![
        Item { name: String::from("Pen") },
        Item { name: String::from("Mug") },
    ];
    println!("items: {}", cart.len());
}

Kısa Kontrol

Yapı vektörlerini anlayıp anlamadığınızı sınayın.

Özet

Yapıları bir Vec içinde sakladınız, bunu vec! ve push ile oluşturdunuz, alanları indeksle ve döngüler içinde okudunuz veya düzenlediniz.

Ayrıca alanları topladınız, filtrelediniz, bir alana göre sıraladınız ve kayıtları saydınız. Artık yapılandırılmış veri listelerini vektörlerle yönetebilirsiniz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Rust öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
39
Dersler
144

Sıkça Sorulan Sorular

“Struct Vektörleri” dersi ücretsiz mi?

Evet — “Struct Vektörleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.

“Struct Vektörleri” dersinde ne öğreneceğim?

Karmaşık verileri bir Vec içinde tutun. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Struct Vektörleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Vektör Oluşturma ve Doldurma
  2. Dizinleme ve Yineleme
  3. Büyütme ve Küçültme
  4. Struct Vektörleri
← Learn Rust Coding Sayfasına Dön