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.

Değer olarak struct'ları sakladığınızda Map'ler inanılmaz derecede güçlü hale gelir. Bu yöntem, kolay arama ve erişim için anlamlı anahtarlar kullanarak karmaşık, yapılandırılmış verileri düzenlemenize olanak tanır.

Struct'ları map değerleri olarak kullandığınızda, esasen her bir anahtarın eksiksiz bir veri kaydına işaret ettiği bir koleksiyon oluşturmuş olursunuz. İşte böyle bir map'i nasıl tanımlayacağınız ve başlatacağınız:

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 bu verilerle çalışabilirsiniz. Bir öğrencinin bilgilerini almak için anahtar olarak öğrencinin adını kullanmanız yeterlidir:

alice := students["Alice"]
fmt.Println(alice.ID)    // şunu yazdırır: 101
fmt.Println(alice.Grade) // şunu 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.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

challenge icon

Görev

Kolay

Değer olarak struct'ları kullanan map'ler aracılığıyla bir öğrenci not yönetim sistemi oluşturun. Bu meydan okuma, verimli arama ve erişim için anlamlı anahtarlar kullanarak karmaşık öğrenci verilerinin nasıl organize edileceğini gösterir.

İki girdi alacaksınız:

  • Öğrenci sayısını temsil eden bir dize (örneğin, "4")
  • Şu formatta öğrenci verilerini içeren bir dize: "name1:id1:grade1,name2:id2:grade2,name3:id3:grade3" (örneğin, "Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")

Göreviniz şunları yapmaktır:

  1. Aşağıdaki alanlara sahip bir Student struct'ı tanımlayın:
    • ID (int) - öğrencinin kimlik numarası
    • Grade (string) - öğrencinin harf notu
  2. Anahtarların öğrenci isimleri (string) ve değerlerin Student struct'ları olduğu bir map oluşturun
  3. İkinci girdiden öğrenci verilerini ayrıştırın:
    • Bireysel öğrenci girişlerini elde etmek için girdiyi virgüllere göre bölün
    • Her giriş için isim, ID ve notu ayırmak üzere iki nokta üst üste işaretine göre bölün
    • ID dizesini bir tam sayıya (integer) dönüştürün
    • Bir Student struct'ı oluşturun ve ismi anahtar olarak kullanarak map'e ekleyin
  4. Tüm öğrencileri isimlerine göre alfabetik sırayla şu formatta görüntüleyin: "[name]: ID [id], Grade [grade]"
  5. Not istatistiklerini hesaplayın ve görüntüleyin:
    • Her nottan (A, B, C, D, F) kaç öğrencinin olduğunu sayın
    • Mevcut olan her not için sayıyı şu formatta görüntüleyin: "Grade [grade]: [count] students"
    • Notları alfabetik sırayla (A, B, C, D, F) görüntüleyin
  6. En yüksek ID'ye sahip öğrenciyi şu formatta 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 tam sayıya dönüştürmek için strconv paketini ve öğrenci isimlerini alfabetik olarak sıralamak için sort paketini kullanın. Bu meydan okuma, struct değerlerine sahip map'lerin, anlamlı tanımlayıcılar kullanarak karmaşık veri koleksiyonlarını organize etmek ve bunlara erişmek için nasıl verimli bir yol sağladığını gösterir.

Kopya kağıdı

Map'ler, her bir anahtarın tam bir veri kaydını işaret ettiği koleksiyonlar oluşturarak struct'ları değer olarak saklayabilir:

type Student struct {
    ID    int
    Grade string
}

students := map[string]Student{
    "Alice": {ID: 101, Grade: "A"},
    "Bob":   {ID: 102, Grade: "B"},
}

Anahtarı kullanarak map üzerinden struct verilerine erişin:

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 hem yapılandırılmış veriye hem de hızlı anahtar tabanlı erişime ihtiyaç duyduğunuz yapılandırma ayarları gibi ilişkili veri koleksiyonlarını saklamak için yaygın olarak kullanılır.

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