Menu
Coddy logo textTech

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: A

Bu 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.

challenge icon

Görev

Kolay

Değ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:

  1. Aşağıdaki alanlara sahip bir Student struct'ı tanımlayın:
    • ID (int) - öğrencinin ID numarası
    • Grade (string) - öğrencinin harf notu
  2. Anahtarları öğrenci adları (string), değerleri ise Student struct'ları olan bir map oluşturun
  3. İ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 Student struct'ı oluşturun ve adı anahtar olarak kullanarak bunu map'e ekleyin
  4. Tüm öğrencileri ada göre alfabetik sırada şu biçimde görüntüleyin: "[name]: ID [id], Grade [grade]"
  5. 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)
  6. En yüksek ID'ye sahip öğrenciyi şu biçimde bulun ve görüntüleyin: "Highest ID: [name] ([id])"
  7. 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
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Go derleyicisi