Maison  >  Article  >  développement back-end  >  Comment convertir une représentation sous forme de chaîne d'un jour de la semaine en une valeur « time.Weekday » ?

Comment convertir une représentation sous forme de chaîne d'un jour de la semaine en une valeur « time.Weekday » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 17:55:03334parcourir

How to Convert a String Representation of a Day of Week into a `time.Weekday` Value?

Analyser la représentation de chaîne du jour de la semaine en temps. Valeur du jour de la semaine

Problème :

Conversion d'une chaîne représentant un jour de la semaine dans un temps équivalent. La valeur du jour de la semaine présente un défi. Le package time n'inclut aucune fonctionnalité intégrée pour cette conversion.

Solution initiale :

Une approche initiale consiste à utiliser un tableau pour stocker le mappage entre le jour de chaînes de semaine et leurs valeurs time.Weekday correspondantes. Par exemple :

<code class="go">var daysOfWeek = [...]string{
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
}

func parseWeekday(v string) (time.Weekday, error) {
    for i := range daysOfWeek {
        if daysOfWeek[i] == v {
            return time.Weekday(i), nil
        }
    }

    return time.Sunday, fmt.Errorf("invalid weekday '%s'", v)
}</code>

Optimisation recommandée :

Pour améliorer l'efficacité et la clarté de cette conversion, une carte est recommandée au lieu d'un tableau. Les cartes permettent des recherches plus rapides, ce qui entraîne des performances améliorées.

<code class="go">var daysOfWeek = map[string]time.Weekday{
    "Sunday":    time.Sunday,
    "Monday":    time.Monday,
    "Tuesday":   time.Tuesday,
    "Wednesday": time.Wednesday,
    "Thursday":  time.Thursday,
    "Friday":    time.Friday,
    "Saturday":  time.Saturday,
}

func parseWeekday(v string) (time.Weekday, error) {
    if d, ok := daysOfWeek[v]; ok {
        return d, nil
    }

    return time.Sunday, fmt.Errorf("invalid weekday '%s'", v)
}</code>

Conseil :

Pour une solution robuste, une boucle for peut être utilisée pour initialiser en toute sécurité le dayOfWeek map.

<code class="go">var daysOfWeek = map[string]time.Weekday{}

func init() {
    for d := time.Sunday; d <= time.Saturday; d++ {
        daysOfWeek[d.String()] = d
    }
}</code>

Flexibilité d'analyse supplémentaire :

La solution basée sur la carte offre un avantage par rapport à l'approche basée sur les tableaux. En ajoutant des paires clé-valeur supplémentaires à la carte, des valeurs valides supplémentaires peuvent être analysées sans modifier la logique d'analyse.

Par exemple, pour analyser à la fois les noms complets et courts à 3 lettres des jours de la semaine, la carte peut être étendu comme suit :

<code class="go">var daysOfWeek = map[string]time.Weekday{}

func init() {
    for d := time.Sunday; d <= time.Saturday; d++ {
        name := d.String()
        daysOfWeek[name] = d
        daysOfWeek[name[:3]] = d
    }
}</code>

Cette solution étendue permet d'analyser des chaînes telles que "Mon" ou "Fri" dans leurs valeurs time.Weekday correspondantes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn