Görev Silme
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 24 / 68.
Görev
KolayGörev yönetim sisteminizin bu bölümünde, listenizden görevleri kaldırma özelliğini uygulayacaksınız. Bu görev, belirli bir öğeyi içermeyecek şekilde bir dilimi yeniden oluşturmak için append işlevini kullanarak dilimlerin nasıl değiştirileceğine odaklanır ve veri yapınızdan öğelerin kalıcı olarak nasıl kaldırılacağını gösterir.
Üç girdi alacaksınız:
- Görevlerin sayısını temsil eden bir dize (ör.
"4") - Görev verilerini şu biçimde içeren bir dize: Durumun
"true"veya"false"olduğu"name1:status1,name2:status2,name3:status3"(ör."Buy groceries:false,Call dentist:true,Finish project:false,Review code:true") - Kaldırılacak görevin dizinini temsil eden bir dize (ör. 0 tabanlı dizinleme kullanılarak ikinci görev için
"1")
Göreviniz:
- Önceki görevlerdeki aynı
Taskyapısını,Name(string) veCompleted(bool) alanlarıyla tanımlayın - Parametre olarak bir
Taskdilimi ve bir dizin (int) alanremoveTaskadlı bir işlev oluşturun removeTaskişlevinin içinde, hedef dizinden önceki ve sonraki öğeleri birleştirmek içinappendkullanarak, verilen dizindeki görevin kaldırıldığı yeni bir dilim döndürün- Görev diliminizi oluşturmak için ikinci girdideki görev verilerini ayrıştırın:
- Tek tek görev girdilerini elde etmek için girdiyi virgüllere göre ayırın
- Adı ve durumu ayırmak için her girdiyi iki nokta üst üste işaretine göre ayırın
- Durum dizesini bir boolean değere dönüştürün (
"true",truedeğerine;"false",falsedeğerine dönüşür)
- Görev dizinini elde etmek için üçüncü girdi dizesini bir tam sayıya dönüştürün
removeTaskişlevini çağırmadan önce kaldırılacak görevin adını saklayın- Dilim ve dizinle
removeTaskişlevinizi çağırın ve döndürülen dilimi saklayın - Görevi kaldırdıktan sonra, önceki görevlerdekiyle aynı biçimi kullanarak kalan tüm görevleri görüntüleyin:
- Tamamlanan görevler için:
"[x] [task_name]" - Tamamlanmamış görevler için:
"[ ] [task_name]"
- Tamamlanan görevler için:
- Bir onay mesajı yazdırın:
"Task '[task_name]' removed successfully!" - Güncellenmiş özeti yazdırın:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Dizin dizesini bir tam sayıya dönüştürmek için strconv paketini kullanın. Bu görev, hedef öğeden önceki ve sonraki bölümleri birleştirerek dilimleri yeniden oluşturmak ve böylece kalan öğelerin sırasını korurken koleksiyonunuzdan öğeleri etkili bir şekilde kaldırmak için append işlevinin nasıl kullanılacağını gösterir.
Kendin dene
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)
}Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve DavranışlarKendi başına pratik yap: Online Go derleyicisi