Menu
Coddy logo textTech

İç İçe Map'ler

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 31 / 65.

Bazen verileri basit bir anahtar-değer çiftinden daha karmaşık, hiyerarşik bir yapıda düzenlemeniz gerekir. İç içe geçmiş haritalar, haritaları diğer haritaların içinde değer olarak depolamanıza ve birden çok veri düzenleme düzeyi oluşturmanıza olanak tanır.

İç içe geçmiş bir map, değerlerin kendilerinin Map nesneleri olduğu bir Map yapısıdır. Bu yapı, birden fazla detaya sahip kullanıcı profilleri veya çeşitli özniteliklere sahip ürün katalogları gibi kategorileri ve alt kategorileri olan verileri temsil etmek için mükemmeldir.

Map<String, Map<String, dynamic>> userProfiles = {
  'alice': {
    'email': 'alice@example.com',
    'age': 28
  },
  'bob': {
    'email': 'bob@example.com',
    'age': 32
  }
};

print(userProfiles['alice']['email']);  // alice@example.com
print(userProfiles['bob']['age']);      // 32

İç içe geçmiş bir eşlemdeki verilere erişmek için birden çok köşeli parantez kullanırsınız. İlk parantez grubu dış eşlemin anahtarına, ikinci grup ise iç eşlemin anahtarına erişir. Bu iki düzeyli yapı, ilgili bilgileri düzenli ve erişilebilir tutarken bunları birlikte gruplamayı kolaylaştırır.

challenge icon

Görev

Kolay

İç içe geçmiş map'leri kullanarak ayrıntılı çalışan bilgilerini depolayan bir şirket çalışan dizini sistemi yöneten bir program oluşturun. Programınız şunları yapmalıdır:

  1. Şirket adını temsil eden bir dize girdisi okuyun
  2. Çalışan verilerini temsil eden birden fazla girdi kümesi okuyun ( "employees_done" aldığınızda girdi sona erecektir). Her çalışanın şunları olacaktır:
    • Çalışan kimliği (dize)
    • Ad (dize)
    • Departman (dize)
    • Maaş (tam sayıya dönüştürülmesi gereken dize)
    • Deneyim yılı (tam sayıya dönüştürülmesi gereken dize)
  3. Aranacak bir çalışan kimliğini temsil eden bir dize girdisi okuyun
  4. Her çalışan kimliğinin bir anahtar olduğu ve değerin çalışanın ayrıntılarını içeren başka bir Map olduğu iç içe geçmiş bir Map oluşturun
  5. İç içe map erişimini kullanarak belirli çalışan bilgilerine erişin ve bunları görüntüleyin
  6. Departman istatistiklerini hesaplayın ve çalışan dizini raporunu aşağıda gösterilen tam biçimde yazdırın

Örneğin şirket adı "TechCorp Solutions" ise, çalışan verileri adı "EMP001", departmanı "Alice Johnson", maaşı "Engineering", deneyimi 75000 olan 5'i; adı "EMP002", departmanı "Bob Smith", maaşı "Marketing", deneyimi 60000 olan 3'yi; adı "EMP003", departmanı "Carol Davis", maaşı "Engineering", deneyimi 80000 olan 7'ü içeriyor ve aranacak çalışan kimliği "EMP001" ise programınızın şu çıktıyı üretmesi gerekir:

Company: TechCorp Solutions
Employee Directory: {EMP001: {name: Alice Johnson, department: Engineering, salary: 75000, experience: 5}, EMP002: {name: Bob Smith, department: Marketing, salary: 60000, experience: 3}, EMP003: {name: Carol Davis, department: Engineering, salary: 80000, experience: 7}}
Employee Lookup (EMP001):
Name: Alice Johnson
Department: Engineering
Salary: $75000
Experience: 5 years
Department Analysis:
Engineering employees: 2
Marketing employees: 1
Total employees: 3
Average salary: $71666
Status: Employee directory processed successfully

Şirket adı "Global Industries" ise, çalışan verileri adı "E100", departmanı "David Wilson", maaşı "Sales", deneyimi 55000 olan 4'ü; adı "E101", departmanı "Emma Brown", maaşı "HR", deneyimi 65000 olan 6'i içeriyor ve aranacak çalışan kimliği "E101" ise programınızın şu çıktıyı üretmesi gerekir:

Company: Global Industries
Employee Directory: {E100: {name: David Wilson, department: Sales, salary: 55000, experience: 4}, E101: {name: Emma Brown, department: HR, salary: 65000, experience: 6}}
Employee Lookup (E101):
Name: Emma Brown
Department: HR
Salary: $65000
Experience: 6 years
Department Analysis:
Sales employees: 1
HR employees: 1
Total employees: 2
Average salary: $60000
Status: Employee directory processed successfully

Şirket adı "StartupHub" ise, çalışan verileri adı "S001", departmanı "Frank Miller", maaşı "Development", deneyimi 70000 olan 2'i; adı "S002", departmanı "Grace Lee", maaşı "Design", deneyimi 58000 olan 3'yi; adı "S003", departmanı "Henry Chen", maaşı "Development", deneyimi 72000 olan 4'ü; adı "S004", departmanı "Ivy Taylor", maaşı "Marketing", deneyimi 62000 olan 5'ü içeriyor ve aranacak çalışan kimliği "S003" ise programınızın şu çıktıyı üretmesi gerekir:

Company: StartupHub
Employee Directory: {S001: {name: Frank Miller, department: Development, salary: 70000, experience: 2}, S002: {name: Grace Lee, department: Design, salary: 58000, experience: 3}, S003: {name: Henry Chen, department: Development, salary: 72000, experience: 4}, S004: {name: Ivy Taylor, department: Marketing, salary: 62000, experience: 5}}
Employee Lookup (S003):
Name: Henry Chen
Department: Development
Salary: $72000
Experience: 4 years
Department Analysis:
Development employees: 2
Design employees: 1
Marketing employees: 1
Total employees: 4
Average salary: $65500
Status: Employee directory processed successfully

Programınız, dış map'in çalışan kimliklerini anahtar olarak kullandığı ve her değerin "name", "department", "salary" ve "experience" anahtarlarını içeren bir iç map olduğu iç içe geçmiş bir Map yapısı oluşturmalıdır. Belirli çalışan bilgilerini almak için çift köşeli parantezlerle iç içe map erişimini kullanın. Çalışanları departmana göre sayın ve toplam maaş tutarını çalışan sayısına bölerek ortalama maaşı hesaplayın. Girdi biçimi şöyle olacaktır: şirket adı, ardından "employees_done" ile biten beş değerlik kümeler (çalışan kimliği, ad, departman, maaş, deneyim) ve son olarak aranacak çalışan kimliği.

GEREKLİ ÇIKTI BİÇİMİ:

[Çevrilmiş içeriğiniz burada]

Kendin dene

import 'dart:io';

void main() {
  // Şirket adını oku
  String? companyName = stdin.readLineSync();
  
  // Çalışan dizini için iç içe geçmiş map yapısını başlat
  Map<String, Map<String, dynamic>> employeeDirectory = {};
  
  // "employees_done" gelene kadar çalışan verilerini oku
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "employees_done") {
      break;
    }
    
    String employeeId = input!;
    String? name = stdin.readLineSync();
    String? department = stdin.readLineSync();
    String? salaryStr = stdin.readLineSync();
    String? experienceStr = stdin.readLineSync();
    
    // Maaş ve deneyimi tam sayıya dönüştür
    int salary = int.parse(salaryStr!);
    int experience = int.parse(experienceStr!);
    
    // TODO: Her çalışan için iç içe geçmiş map yapısını oluştur ve dizine ekle
    
  }
  
  // Aranacak çalışan kimliğini (ID) oku
  String? lookupId = stdin.readLineSync();
  
  // TODO: Aşağıdaki işlemleri yapmak için kodunuzu yazın:
  // 1. Şirket adını ve çalışan dizinini görüntüleyin
  // 2. Belirli bir çalışan bilgisini arayın ve görüntüleyin
  // 3. Departman istatistiklerini hesaplayın
  // 4. Ortalama maaşı hesaplayın
  // 5. Tam raporu istenen formatta yazdırın
  
}
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 & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi