Menghapus Tugas
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 24 dari 68.
Tantangan
MudahDi bagian sistem manajemen tugas ini, kamu akan menerapkan kemampuan untuk menghapus tugas dari list-mu. Tantangan ini berfokus pada manipulasi slice menggunakan fungsi append untuk menyusun ulang slice tanpa elemen tertentu, sekaligus menunjukkan cara menghapus item secara permanen dari struktur datamu.
Kamu akan menerima tiga input:
- String yang menunjukkan jumlah tugas (misalnya,
"4") - String berisi data tugas dengan format:
"name1:status1,name2:status2,name3:status3", dengan status berupa"true"atau"false"(misalnya,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true") - String yang menunjukkan indeks tugas yang akan dihapus (misalnya,
"1"untuk tugas kedua, menggunakan indeks berbasis 0)
Tugasmu adalah:
- Definisikan struct
Taskyang sama seperti pada tantangan sebelumnya, dengan fieldName(string) danCompleted(bool) - Buat fungsi bernama
removeTaskyang menerima slice structTaskdan indeks (int) sebagai parameter - Di dalam fungsi
removeTask, kembalikan slice baru dengan menghapus tugas pada indeks yang diberikan. Gunakanappenduntuk menggabungkan elemen sebelum dan sesudah indeks sasaran - Uraikan data tugas dari input kedua untuk membuat slice tugas:
- Pisahkan input dengan koma untuk mendapatkan setiap entri tugas
- Untuk setiap entri, pisahkan dengan titik dua untuk memisahkan nama dan status
- Ubah string status menjadi boolean (
"true"menjaditrue,"false"menjadifalse)
- Ubah string input ketiga menjadi bilangan bulat untuk mendapatkan indeks tugas
- Simpan nama tugas yang akan dihapus sebelum memanggil fungsi
removeTask - Panggil fungsi
removeTaskdengan slice dan indeksmu, lalu simpan slice yang dikembalikan - Setelah menghapus tugas, tampilkan semua tugas yang tersisa dengan format yang sama seperti pada tantangan sebelumnya:
- Untuk tugas yang selesai:
"[x] [task_name]" - Untuk tugas yang belum selesai:
"[ ] [task_name]"
- Untuk tugas yang selesai:
- Cetak pesan konfirmasi:
"Task '[task_name]' removed successfully!" - Cetak ringkasan yang diperbarui:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Gunakan package strconv untuk mengubah string indeks menjadi bilangan bulat. Tantangan ini menunjukkan cara menggunakan append untuk menyusun ulang slice dengan menggabungkan bagian sebelum dan sesudah elemen sasaran. Dengan begitu, kamu dapat menghapus item dari koleksimu sekaligus mempertahankan urutan elemen yang tersisa.
Coba sendiri
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func completeTask(tasks *[]Task, index int) {
(*tasks)[index].Completed = true
}
func main() {
// Read input using bufio.Scanner to handle spaces properly
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
_ = scanner.Text() // Read but don't use the number of tasks
scanner.Scan()
taskDataStr := scanner.Text()
scanner.Scan()
indexStr := scanner.Text()
// Parse task data
taskEntries := strings.Split(taskDataStr, ",")
tasks := make([]Task, len(taskEntries))
for i, entry := range taskEntries {
parts := strings.Split(entry, ":")
if len(parts) >= 2 {
name := parts[0]
status := parts[1] == "true"
tasks[i] = Task{Name: name, Completed: status}
}
}
// Convert index string to integer
index, _ := strconv.Atoi(indexStr)
// Complete the task
taskName := tasks[index].Name
completeTask(&tasks, index)
// Display all tasks
for _, task := range tasks {
if task.Completed {
fmt.Printf("[x] %s\n", task.Name)
} else {
fmt.Printf("[ ] %s\n", task.Name)
}
}
// Print confirmation message
fmt.Printf("Task '%s' marked as completed!\n", taskName)
// Count completed and incomplete tasks
completedCount := 0
for _, task := range tasks {
if task.Completed {
completedCount++
}
}
incompleteCount := len(tasks) - completedCount
// Print summary
fmt.Printf("Total: %d tasks (%d completed, %d remaining)\n", len(tasks), completedCount, incompleteCount)
}Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online