以下の内容はhttps://devlights.hatenablog.com/entry/2025/09/22/073000より取得しました。


Goメモ-619 (slices.Chunkを使ってスライスを特定のチャンクに分けて処理)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。

Go1.23でiterパッケージのサポートが入ったことで、slicesmapsパッケージに便利な関数が追加されました。

その中に slices.Chunk があります。チャンク処理ってデータ処理では結構利用するものなので、これが標準ライブラリに追加されたのは良いことですね。

何かを3つずつ出力とかするときに使えます。

サンプル

slice_iter_chunk.go

package sliceop

import (
    "cmp"
    "fmt"
    "maps"
    "slices"
)

// Chunk は、slices.Chunk()のサンプルです。
func Chunk() error {
    //
    // Go1.23でサポートされたiterパッケージのサンプルとして
    // わざとマップからスライスへの変換をしている
    //
    var (
        months = map[string]string{
            "Janualy":   "1",
            "Febualy":   "2",
            "March":     "3",
            "April":     "4",
            "May":       "5",
            "June":      "6",
            "July":      "7",
            "August":    "8",
            "September": "9",
            "October":   "10",
            "November":  "11",
            "December":  "12",
        }
        monthNames  = slices.Collect(maps.Keys(months))
        maxLenMonth = slices.MaxFunc(monthNames, func(x, y string) int {
            return cmp.Compare(len(x), len(y))
        })
    )

    //
    // ソートして、3つずつ出力
    //
    const (
        nChunks = 3
    )

    slices.Sort(monthNames)
    for chunk := range slices.Chunk(monthNames, nChunks) {
        for v := range slices.Values(chunk) {
            fmt.Printf("%-*s", len(maxLenMonth), v)
        }

        fmt.Println("")
    }

    return nil
}

実行結果

$ task
task: [build] go build -o "/home/dev/dev/github/try-golang/try-golang" .
task: [run] ./try-golang -onetime

ENTER EXAMPLE NAME: sliceop_iter_chunk

[Name] "sliceop_iter_chunk"
April    August   December
Febualy  Janualy  July
June     March    May
November October  September

[Elapsed] 81.717µs

参考情報

devlights.hatenablog.com

Goのおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。




以上の内容はhttps://devlights.hatenablog.com/entry/2025/09/22/073000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14