Golang を使用して分類合計を実装する方法

PHPz
リリース: 2023-04-24 10:57:54
オリジナル
826 人が閲覧しました

コンピューター プログラミングでは、分類合計が一般的な問題です。つまり、一連の数値を属性に従って分類し、各カテゴリ内の数値を合計します。この問題は、統計、データマイニング、データ分析など、多くの分野に応用できます。この記事では、Golangを使用してカテゴリカル合計を実装する方法を紹介します。

まず、数値を表すデータ構造を定義する必要があります。このデータ構造には、値とカテゴリという 2 つの属性が含まれます。 Golang では、構造体を使用してこのデータ構造を実装できます。コードは次のとおりです:

type Data struct {
    value float64
    category string
}
ログイン後にコピー

次に、入力データ セットをカテゴリに従って分類し、それぞれの合計を分類する関数を作成する必要があります。カテゴリ内の数値。この関数は、データのリストを入力として受け入れ、キーがカテゴリ、値がそのカテゴリ内の数値の合計である辞書を返す必要があります。 Golang では、マップ タイプを使用してこの辞書を実装できます。コードは次のとおりです:

func sumByCategory(dataList []Data) map[string]float64 {
    sumsByCategory := make(map[string]float64)
    for _, data := range dataList {
        sumsByCategory[data.category] += data.value
    }
    return sumsByCategory
}
ログイン後にコピー

この関数は、まず空のマップを作成し、各カテゴリの数値の合計を保存します。次に、入力データ リストを繰り返し処理し、対応するカテゴリの合計に各数値を加算します。最後に、各カテゴリ内の数値の合計を保持するマップを返します。

以下は、上で実装した関数をテストするための完全なサンプル プログラムです:

package main

import "fmt"

type Data struct {
    value float64
    category string
}

func sumByCategory(dataList []Data) map[string]float64 {
    sumsByCategory := make(map[string]float64)
    for _, data := range dataList {
        sumsByCategory[data.category] += data.value
    }
    return sumsByCategory
}

func main() {
    dataList := []Data{
        {2.0, "A"},
        {3.2, "B"},
        {4.5, "C"},
        {1.8, "A"},
        {2.3, "B"},
        {5.1, "C"},
    }

    sumsByCategory := sumByCategory(dataList)
    fmt.Println(sumsByCategory)
}
ログイン後にコピー

このプログラムを実行すると、次の結果が出力されます:

map[A:3 B:5.5 C:9.6]
ログイン後にコピー

この結果は、カテゴリ合計関数は、入力データをカテゴリに正しく並べ替え、各カテゴリ内の数値を合計します。

最後に、実際の問題では、データが非常に大きくなり、すべてをメモリに保存できない場合があることに注意してください。この場合、外部並べ替えアルゴリズムを使用してデータを断片に並べ替えてから、分類と合計を実行できます。このアルゴリズムには、より多くの Golang 組み込み関数と外部ライブラリが関与するため、この記事の範囲を超えています。

つまり、分類の合計は一般的な問題であり、Golang での実装は非常に簡単です。 Golang の構造体とマップ型を使用すると、属性に従ってデータのセットを簡単に分類し、各カテゴリ内の数値を合計することができます。

以上がGolang を使用して分類合計を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート