Rangkuman: Operasi HashMap
Termasuk bagian Logika dan Alur dalam perjalanan C# di Coddy. Pelajaran 55 dari 66.
Tantangan
SedangBuat method bernama ProcessDictionary yang melakukan operasi lanjutan pada inventory Dictionary<string, int>. Method ini harus:
- Memproses perintah dari list operasi:
COUNT: CetakTotal items: {count}(dengan{count}adalah jumlah key yang berbeda), lalu cetak pesan keberhasilanADD item quantity: Tambahkan item baru dengan jumlah yang ditentukan (jika item sudah ada, tambahkan jumlahnya), lalu cetak pesan keberhasilanREMOVE item: Hapus item yang ditentukan dari inventory, lalu cetak pesan keberhasilan atau kegagalanUPDATE item quantity: Tetapkan jumlah item ke nilai yang ditentukan, lalu cetak pesan keberhasilan atau kegagalanFIND item: Jika ditemukan, cetak{item}: {quantity}lalu pesan keberhasilan; jika tidak ditemukan, cetakNot foundlalu pesan kegagalan
- Untuk setiap operasi, cetak pesan status dengan format persis berikut:
Operation {command} performed successfullyOperation {command} failed: {reason}. Dengan{reason}berupaItem not foundjika item tidak ada dalam inventory
- Kembalikan dictionary inventory yang telah diperbarui
Contohnya, memproses
FIND orange pada inventory yang berisi orange: 3 akan mencetak:orange: 3Operation FIND performed successfullyDan memproses
REMOVE shoes saat shoes tidak ada dalam inventory akan mencetak:Operation REMOVE failed: Item not foundCoba sendiri
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class Program
{
public static Dictionary<string, int> ProcessDictionary(Dictionary<string, int> inventory, List<string> operations)
{
// Tulis kodemu di sini
return inventory;
}
static void Main(string[] args)
{
Dictionary<string, int> inventory = new Dictionary<string, int>();
List<string> operations = new List<string>();
// Baca baris pertama untuk memeriksa apakah inventory berformat JSON
string firstLine = Console.ReadLine();
// Periksa apakah input untuk inventory berformat JSON
if (firstLine != null && firstLine.StartsWith("{") && firstLine.EndsWith("}"))
{
try
{
// Proses input JSON untuk inventory
string jsonContent = firstLine.Substring(1, firstLine.Length - 2);
// Pisahkan berdasarkan koma yang tidak berada di dalam tanda kutip
string pattern = @",(?=(?:[^""]*""[^""]*"")*[^""]*$)";
string[] entries = Regex.Split(jsonContent, pattern);
foreach (string entry in entries)
{
// Ambil kunci dan nilai menggunakan regex
Match match = Regex.Match(entry, @"""([^""]+)""\s*:\s*(\d+)");
if (match.Success)
{
string keyMatch = match.Groups[1].Value;
int valueMatch = int.Parse(match.Groups[2].Value);
inventory.Add(keyMatch, valueMatch);
}
}
// Read second line for operations
string secondLine = Console.ReadLine();
// Check if operations are in JSON array format
if (secondLine != null && secondLine.StartsWith("[") && secondLine.EndsWith("]"))
{
try
{
// Extract content between square brackets
string arrayContent = secondLine.Substring(1, secondLine.Length - 2);
// Use regex to match all quoted strings - this is more robust
MatchCollection matches = Regex.Matches(arrayContent, @"""([^""]*)""");
foreach (Match match in matches)
{
// Add the captured group (without quotes)
if (match.Groups.Count > 1)
{
operations.Add(match.Groups[1].Value);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing operations array: {ex.Message}");
return;
}
}
else
{
// Process operations in traditional format
int m = int.Parse(secondLine);
for (int i = 0; i < m; i++)
{
operations.Add(Console.ReadLine());
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing JSON input: {ex.Message}");
return;
}
}
else
{
// Process traditional input format
int n = int.Parse(firstLine);
for (int i = 0; i < n; i++)
{
string[] parts = Console.ReadLine().Split(':');
inventory.Add(parts[0], int.Parse(parts[1]));
}
// Read operations
int m = int.Parse(Console.ReadLine());
for (int i = 0; i < m; i++)
{
operations.Add(Console.ReadLine());
}
}
Dictionary<string, int> result = ProcessDictionary(inventory, operations);
// Print updated inventory
Console.WriteLine("Final Inventory:");
foreach (var item in result)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
}
}Semua pelajaran di Logika dan Alur
1array Multidimensi
Dasar-Dasar array 2DMendeklarasikan dan Menginisialisasi array 2DMengakses Elemen array 2DPerulangan Bersarang dengan array 2Darray BergerigiOperasi Matriks UmumRangkuman: array Multidimensi4Teknik Alur Kontrol
Pengembalian DiniKlausa PenjagaPernyataan Lompatan (goto)Break dan ContinueMeratakan Percabangan Bersarang7Operator Logika Lanjutan
Evaluasi Hubung SingkatOperator Logika PercabanganPrioritas OperatorRingkasan Operator Lanjutan2Pengambilan Keputusan Tingkat Lanjut
Beberapa KondisiLogika Boolean yang KompleksPerbandingan If dan SwitchPernyataan Switch BersarangUlasan: Pengambilan Keputusan Tingkat Lanjut5Penanganan Exception
Dasar Try-CatchJenis ExceptionBeberapa Blok CatchBekerja dengan fileBlok FinallyUsing vs. Try-FinallyException KustomRingkasan: Penanganan error3Peningkatan Loop
Performa LoopIterasi yang KompleksSetiap Jenis LoopRefactoring LoopRangkuman: Loop yang Dioptimalkan6Penanganan Null
Dasar Referensi NullTipe Nilai NullablePola Pemeriksaan NullPemrograman DefensifRingkasan: Keamanan NullLatihan sendiri: Compiler C# online