Go でマップとキー構造体を使用して構造体のスライスをグループ化して合計するにはどうすればよいですか?
Go で構造体のスライスをグループ化して合計する
データを分析するとき、多くの場合、類似した要素をグループ化し、集計値を計算する必要があります。各グループ。 LINQ では、これはメモリ内クエリを使用して効率的に実現できます。 Go は、マップとクロージャを使用して同様の操作を実行する多用途の方法を提供します。
各構造体に複数の一意の識別子 (id1 から id8) と整数値 (money) が含まれる Register 構造体のスライスを考えてみましょう。目標は、これらのレジスタを一意の識別子でグループ化し、各グループに対応する金額を合計することです。
手動でのグループ化と合計:
1 つのアプローチは、カスタム Equal 関数を使用して、識別子に基づいて Register 構造体を比較します。次に、スライスを反復処理して、各レジスタがハッシュ テーブルにすでに存在するかどうかを確認します。そうであれば、貨幣価値が増加します。そうでない場合は、レジスタと初期通貨値 0 を含むハッシュ テーブルに新しいエントリが追加されます。
キー構造体とマップの使用:
Go のマップは、グループ化と合計の操作をより効率的に実行する方法を提供します。一意の識別子 (id1 ~ id8) のみを含む別の Key 構造体を定義すると、それをマップの一意のキーとして使用できます。マップ内の値は、同じ識別子の組み合わせを持つレジスターの金額の合計とすることができます。
このアプローチを実装するには:
- キー構造体とレジスター構造体を定義します:
<code class="go">type Key struct { id1 int id2 int id3 int id4 int id5 int id6 int id7 int id8 int } type Register struct { key Key money int }</code>
- キーとして Key を使用し、値として初期通貨値を使用してマップを設定します。
<code class="go">m := map[Key]int{}</code>
- レジスターを反復処理します。それらをマップに追加するか、対応する金額を更新します:
<code class="go">for _, v := range regs { m[v.key] += v.money }</code>
出力と書式設定:
結果を適切に表示するには、すべてのフィールドの先頭に id が付いているキー構造体。例:
<code class="go">fmt.Println("Nice output:") for k, v := range m { fmt.Printf("%+3v: %d\n", k, v) }</code>
結論:
主要な構造体でマップを使用することは、Go で構造体のスライスをグループ化して合計するための効率的かつ柔軟な方法です。これは、特に大規模なデータセットを扱う場合に、手動のグループ化と合計に代わるパフォーマンスの高い代替手段となります。
以上がGo でマップとキー構造体を使用して構造体のスライスをグループ化して合計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?
