.NET の LINQ クエリと同様に、Golang では構造体に対してメモリ内クエリを実行できます。この記事では、構造体のスライスを複数のフィールドでグループ化し、その後、特定の整数フィールドを合計する方法を説明します。
id1 から id8 という名前のフィールドと整数フィールド Money を持つ構造体のスライスが与えられたとします。 、目的は、構造体を id フィールドでグループ化し、金額フィールドを合計することです。
1 つのアプローチは、構造体をベースに比較する Equal 関数を定義することです。 8 つの ID フィールドで。続いて、入力スライスを反復処理し、各構造体がハッシュ テーブルに存在するかどうかを確認します。すでに存在する場合は、money フィールドが増分されます。それ以外の場合は、新しいエントリがハッシュ テーブルに追加されます。
ただし、Golang の組み込み機能を使用した、より効率的で洗練されたソリューションがあります。
重要な概念は、Key と呼ばれる別の構造体にグループ化フィールドのみを含むように Register 構造体を再構築することです。 Golang では構造体が同等であるため、キーをマップのキーとして使用できます。その後、マップの値を介して Money フィールドにアクセスできます。
更新された構造体の定義は次のとおりです:
<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>
グループ化するにはレジスタを合計するには、map[Key]int 型のマップが Register.key をキーとして使用されます。このアプローチにより、同じ ID フィールドを持つレジスターが確実にグループ化され、グループごとに金額フィールドが累積されます。
<code class="go">m := map[Key]int{} for _, v := range regs { m[v.key] += v.money }</code>
マップ m には、グループ化および合計された値が含まれており、分析用に印刷できます。 .
ここで説明したソリューションは、Golang で構造体のスライスをグループ化して合計するための堅牢で効率的なメカニズムを提供します。言語の組み込み機能を活用することで、カスタム比較関数やハッシュ テーブルの必要性がなくなり、コードが簡潔で保守しやすくなります。
以上がGolang で複数のフィールドごとに構造体のスライスをグループ化して合計する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。