Struct Map'leri
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 26 / 68.
Struct'ları değer olarak sakladığınızda map'ler inanılmaz derecede güçlü hâle gelir. Bu kalıp, kolay arama ve erişim için anlamlı anahtarlar kullanarak karmaşık, yapılandırılmış verileri düzenlemenizi sağlar.
Struct'ları map değerleri olarak kullandığınızda, aslında her anahtarın eksiksiz bir veri kaydına işaret ettiği bir koleksiyon oluşturursunuz. Böyle bir map'i şu şekilde bildirip başlatabilirsiniz:
type Student struct {
ID int
Grade string
}
students := map[string]Student{
"Alice": {ID: 101, Grade: "A"},
"Bob": {ID: 102, Grade: "B"},
}Struct verilerine tıpkı diğer map işlemlerinde olduğu gibi map üzerinden erişebilir ve bunlarla çalışabilirsin. Bir öğrencinin bilgilerini almak için anahtar olarak öğrencinin adını kullanman yeterlidir:
alice := students["Alice"]
fmt.Println(alice.ID) // yazdırır: 101
fmt.Println(alice.Grade) // yazdırır: ABu desen; kullanıcı profilleri, ürün katalogları veya yapılandırma ayarları gibi hem yapılandırılmış veriye hem de hızlı anahtar tabanlı erişime ihtiyaç duyduğunuz ilişkili veri koleksiyonlarını depolamak için Go uygulamalarında son derece yaygındır.
Görev
KolayDeğer olarak yapıların kullanıldığı map'lerle bir öğrenci notu yönetim sistemi oluşturun. Bu görev, verimli arama ve erişim için anlamlı anahtarlar kullanarak karmaşık öğrenci verilerinin nasıl düzenleneceğini gösterir.
İki girdi alacaksınız:
- Öğrenci sayısını temsil eden bir dize (ör.
"4") - Şu biçimde öğrenci verilerini içeren bir dize:
"name1:id1:grade1,name2:id2:grade2,name3:id3:grade3"(ör."Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")
Göreviniz:
- Aşağıdaki alanlara sahip bir
Studentstruct'ı tanımlayın:ID(int) - öğrencinin ID numarasıGrade(string) - öğrencinin harf notu
- Anahtarları öğrenci adları (string), değerleri ise
Studentstruct'ları olan bir map oluşturun - İkinci girdideki öğrenci verilerini ayrıştırın:
- Tek tek öğrenci kayıtlarını elde etmek için girdiyi virgüllere göre ayırın
- Her kayıt için ad, ID ve notu ayırmak üzere iki nokta üst üste işaretlerine göre ayırın
- ID dizesini bir tam sayıya dönüştürün
- Bir
Studentstruct'ı oluşturun ve adı anahtar olarak kullanarak bunu map'e ekleyin
- Tüm öğrencileri ada göre alfabetik sırada şu biçimde görüntüleyin:
"[name]: ID [id], Grade [grade]" - Not istatistiklerini hesaplayıp görüntüleyin:
- Her nota (A, B, C, D, F) sahip kaç öğrenci olduğunu sayın
- Görünen her notun sayısını şu biçimde görüntüleyin:
"Grade [grade]: [count] students" - Notları alfabetik sırada görüntüleyin (A, B, C, D, F)
- En yüksek ID'ye sahip öğrenciyi şu biçimde bulun ve görüntüleyin:
"Highest ID: [name] ([id])" - Toplam öğrenci sayısını görüntüleyin:
"Total students: [count]"
ID dizesini bir tam sayıya dönüştürmek için strconv paketini, öğrenci adlarını alfabetik olarak sıralamak için de sort paketini kullanın. Bu görev, struct değerlerine sahip map'lerin, anlamlı tanımlayıcılar kullanarak karmaşık veri koleksiyonlarını düzenlemek ve bunlara erişmek için nasıl verimli bir yol sunduğunu gösterir.
Kendin dene
package main
import (
"fmt"
)
func main() {
// Girdiyi oku
var numStudentsStr string
var studentData string
fmt.Scanln(&numStudentsStr)
fmt.Scanln(&studentData)
// TODO: Burada Student yapısını (struct) tanımlayın
// TODO: Öğrencileri saklamak için bir map oluşturun (anahtar olarak isim, değer olarak Student yapısı)
// TODO: Öğrenci verilerini ayrıştırın ve map'i doldurun
// TODO: Tüm öğrencileri isme göre alfabetik sırayla görüntüleyin
// TODO: Not istatistiklerini hesaplayın ve görüntüleyin
// TODO: En yüksek ID'ye sahip öğrenciyi bulun ve görüntüleyin
// TODO: Toplam öğrenci sayısını görüntüleyin
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve DavranışlarKendi başına pratik yap: Online Go derleyicisi