Supprimer une tâche
Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 24 sur 68.
Défi
FacileDans cette partie de votre système de gestion des tâches, vous allez implémenter la possibilité de supprimer des tâches de votre liste. Ce défi porte sur la manipulation des slices à l’aide de la fonction append afin de reconstruire une slice sans un élément spécifique, montrant ainsi comment supprimer définitivement des éléments de votre structure de données.
Vous recevrez trois entrées :
- Une chaîne représentant le nombre de tâches (par exemple,
"4") - Une chaîne contenant les données des tâches au format :
"name1:status1,name2:status2,name3:status3", où le statut est soit"true", soit"false"(par exemple,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true") - Une chaîne représentant l’index de la tâche à supprimer (par exemple,
"1"pour la deuxième tâche, en utilisant un indexage commençant à 0)
Votre tâche consiste à :
- Définir la même structure
Taskque dans les défis précédents, avec les champsName(string) etCompleted(bool) - Créer une fonction appelée
removeTaskqui prend en paramètres une slice de structuresTasket un index (int) - À l’intérieur de la fonction
removeTask, retourner une nouvelle slice où la tâche située à l’index donné est supprimée, en utilisantappendpour combiner les éléments situés avant et après l’index cible - Analyser les données des tâches de la deuxième entrée pour créer votre slice de tâches :
- Séparer l’entrée par des virgules pour obtenir les entrées de tâches individuelles
- Pour chaque entrée, la séparer au niveau des deux-points afin de distinguer le nom et le statut
- Convertir la chaîne du statut en booléen (
"true"devienttrue,"false"devientfalse)
- Convertir la chaîne de la troisième entrée en entier pour obtenir l’index de la tâche
- Stocker le nom de la tâche à supprimer avant d’appeler la fonction
removeTask - Appeler votre fonction
removeTaskavec votre slice et l’index, puis stocker la slice renvoyée - Après avoir supprimé la tâche, afficher toutes les tâches restantes en utilisant le même format que dans les défis précédents :
- Pour les tâches terminées :
"[x] [task_name]" - Pour les tâches incomplètes :
"[ ] [task_name]"
- Pour les tâches terminées :
- Afficher un message de confirmation :
"Task '[task_name]' removed successfully!" - Afficher le résumé mis à jour :
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Utilisez le package strconv pour convertir la chaîne représentant l’index en entier. Ce défi montre comment utiliser append pour reconstruire des slices en combinant les portions situées avant et après un élément cible, supprimant ainsi efficacement des éléments de votre collection tout en conservant l’ordre des éléments restants.
Essayez vous-même
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)
}Toutes les leçons de Logique & Flux
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportementsEntraînez-vous par vous-même : Compilateur Go en ligne