Go で構造体のスライスをグループ化して合計する
このシナリオでは、8 つの特定のフィールドに基づいて構造体のスライスをグループ化することを目的としています。 SQL クエリと同様に、追加の整数フィールドを合計します。これを実現するには、最初に、構造体を比較し、各項目がハッシュ テーブル内にあるかどうかを繰り返しチェックし、それに応じてフィールドを追加または合計するための Equal 関数を作成することを検討しました。
あなたのアプローチは有効ですが、別の解決策があります。効率性とシンプルさを実現します。キー フィールド (id1 ~ id8) が別の構造体 Key を形成するように型をリファクタリングします。これにより、Go では構造体が同等であるため、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]int. Register.key をマップ キーとして使用し、同じキー (ID) を持つすべてのレジスタを収集します。
<code class="go">regs := []*Register{ {Key{id1: 345}, 1500}, {Key{id1: 345, id2: 140}, 2700}, {Key{id1: 345, id2: 140}, 1300}, {Key{id1: 345}, 1000}, {Key{id3: 999}, 1000}, {Key{id3: 999}, 2000}, } // calculate sum: m := map[Key]int{} for _, v := range regs { m[v.key] += v.money }</code>
このソリューションは、提供された構造体のスライスをグループ化して合計する簡単で効率的な方法を提供します。追加のライブラリや複雑な反復メカニズムは必要ありません。
以上がGo で構造体のスライスを効率的にグループ化して合計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。