Menu
Coddy logo textTech

Eine Aufgabe entfernen

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 24 von 68.

challenge icon

Aufgabe

Einfach

In diesem Teil Ihres Aufgabenverwaltungssystems implementieren Sie die Möglichkeit, Aufgaben aus Ihrer Liste zu entfernen. Diese Herausforderung konzentriert sich auf die Manipulation von Slices unter Verwendung der append-Funktion, um ein Slice ohne ein bestimmtes Element zu rekonstruieren. Dies zeigt, wie man Elemente dauerhaft aus seiner Datenstruktur entfernt.

Sie erhalten drei Eingaben:

  • Einen String, der die Anzahl der Aufgaben darstellt (z. B. "4")
  • Einen String, der die Aufgabendaten im Format "name1:status1,name2:status2,name3:status3" enthält, wobei der Status entweder "true" oder "false" ist (z. B. "Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
  • Einen String, der den Index der zu entfernenden Aufgabe darstellt (z. B. "1" für die zweite Aufgabe, unter Verwendung der 0-basierten Indizierung)

Ihre Aufgabe ist es:

  1. Definieren Sie dieselbe Task-Struktur aus den vorherigen Herausforderungen mit den Feldern Name (string) und Completed (bool)
  2. Erstellen Sie eine Funktion namens removeTask, die ein Slice von Task-Strukturen und einen Index (int) als Parameter entgegennimmt
  3. Geben Sie innerhalb der Funktion removeTask ein neues Slice zurück, bei dem die Aufgabe am angegebenen Index entfernt wurde, indem Sie append verwenden, um die Elemente vor und nach dem Zielindex zu kombinieren
  4. Analysieren Sie die Aufgabendaten aus der zweiten Eingabe, um Ihr Slice von Aufgaben zu erstellen:
    • Teilen Sie die Eingabe durch Kommas auf, um die einzelnen Aufgabeneinträge zu erhalten
    • Teilen Sie jeden Eintrag durch einen Doppelpunkt auf, um Name und Status zu trennen
    • Konvertieren Sie den Status-String in einen booleschen Wert ("true" wird zu true, "false" wird zu false)
  5. Konvertieren Sie den dritten Eingabestring in eine Ganzzahl, um den Aufgabenindex zu erhalten
  6. Speichern Sie den Namen der zu entfernenden Aufgabe, bevor Sie die Funktion removeTask aufrufen
  7. Rufen Sie Ihre Funktion removeTask mit Ihrem Slice und dem Index auf und speichern Sie das zurückgegebene Slice
  8. Zeigen Sie nach dem Entfernen der Aufgabe alle verbleibenden Aufgaben im gleichen Format wie in den vorherigen Herausforderungen an:
    • Für erledigte Aufgaben: "[x] [task_name]"
    • Für nicht erledigte Aufgaben: "[ ] [task_name]"
  9. Geben Sie eine Bestätigungsmeldung aus: "Task '[task_name]' removed successfully!"
  10. Geben Sie die aktualisierte Zusammenfassung aus: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Verwenden Sie das Paket strconv, um den Index-String in eine Ganzzahl umzuwandeln. Diese Herausforderung zeigt, wie man append verwendet, um Slices zu rekonstruieren, indem man Teile vor und nach einem Zielelement kombiniert und so effektiv Elemente aus Ihrer Sammlung entfernt, während die Reihenfolge der verbleibenden Elemente beibehalten wird.

Probier es selbst

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)
}

Alle Lektionen in Logik & Ablauf