ホームページ  >  記事  >  バックエンド開発  >  Go で平日の文字列を time.Weekday に効率的に変換するにはどうすればよいですか?

Go で平日の文字列を time.Weekday に効率的に変換するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 13:10:34162ブラウズ

How Do I Convert Weekday Strings to time.Weekday in Go Efficiently?

平日文字列を時間に解析します。平日: マップを使用した慣用的アプローチ

平日文字列を対応する時間に変換します。平日の値Go にはこの変換用の機能が組み込まれていないため、カスタム ソリューションが必要です。提示された配列ベースの関数は実行可能なソリューションを提供しますが、マップベースのアプローチには効率と柔軟性の点で利点があります。

マップを使用した拡張ソリューション

を使用する代わりにキーとして平日の文字列とそれに対応する時間を含むマップを利用する配列。平日の値を値として使用すると、検索が大幅に高速化され、コードが簡素化されます。

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

マップベースのアプローチの利点

  • 高速な検索: マップは O(1) の検索時間を提供し、配列を反復処理するよりも効率的になります。
  • 簡単な初期化: マップの初期化は、次の例に示すように、特に for ループを使用して行う場合に簡単です。
<code class="go">var daysOfWeek = map[string]time.Weekday{}

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

追加入力のためのマップの展開

このマップベースのアプローチでは、time.Weekday に解析できる新しい有効な値を柔軟に追加することもできます。たとえば、3 文字の短い曜日名を単純なループに含めることができます:

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

この拡張機能を使用すると、完全な曜日名 (例: 「Monday」) と短い曜日名 (例: 「Mon」) の両方を解析できます。 ") into time.Weekday.

このコンテキストでマップを使用すると、Go で平日の文字列を time.Weekday の値に解析する、より速く、より便利で、拡張可能な方法が提供されます。

以上がGo で平日の文字列を time.Weekday に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。