Golang は、静的型付け、同時実行性の高いオブジェクト指向プログラミング言語であり、近年ますます人気が高まっている言語の 1 つでもあります。 Golang には Set 型はありませんが、スライスやマップなどの基本的なデータ構造によって簡単に Set の機能を実装できます。この記事ではGolangでSetを実装する方法を紹介します。
Set は順序付けされておらず、繰り返しのないデータ構造であり、要素の追加、要素の削除、要素が存在するかどうかの判断など、セットの基本操作をサポートします。 Set では、要素間に順序関係はなく、各要素は一意です。
Golang の Slice は Set の機能を実装できます。これは、Slice 内の要素が順序付けされており、各要素が繰り返し現れることができるためです。 Set の目的を達成するために、カスタム メソッドを通じて Slice の重複排除操作を実装できます。
type SetSlice []interface{} func (s *SetSlice) Add(val interface{}) { for _, v := range *s { if val == v { return } } *s = append(*s, val) } func (s *SetSlice) Remove(val interface{}) { for i, v := range *s { if val == v { *s = append((*s)[:i], (*s)[i+1:]...) return } } } func (s *SetSlice) Contains(val interface{}) bool { for _, v := range *s { if val == v { return true } } return false }
上記のコードでは、SetSlice タイプをカスタマイズし、Add、Remove、Contains などのメソッドを追加しました。 Add メソッドを呼び出すときは、まずスライスを走査して同じ要素が存在するかどうかを確認し、存在する場合は直接戻ります。存在しない場合は、要素をスライスに追加します。要素を削除する場合は、スライスを走査して、削除する要素を見つけます。削除され、削除操作が実行されます。要素が存在するかどうかを判断するときは、スライスを走査して要素を見つけます。
Slice に加えて、Golang の Map は Set の機能も実装できます。これは、Map 内の各キーが一意である必要があるためです。 Map のキーを要素の値として使用し、Map の値を任意の値に設定できます。特定の値は気にせず、要素が Map に表示されるかどうかを判断するだけで済みます。
type SetMap map[interface{}]struct{} var exist = struct{}{} func (s SetMap) Add(val interface{}) { s[val] = exist } func (s SetMap) Remove(val interface{}) { delete(s, val) } func (s SetMap) Contains(val interface{}) bool { _, c := s[val] return c }
上記のコードでは、SetMap タイプをカスタマイズし、Add、Remove、Contains などのメソッドを追加しました。 Add メソッドを呼び出すときは、要素を Map のキーとして Map に直接挿入し、値は空の struct{} 型です。要素を削除するときは、delete 関数を使用して Map 内の対応するキーを直接削除します。 ; 要素が存在するかどうかを判断するときは、Map 内の対応するキーにアクセスすることで要素が存在するかどうかを判断します。
Golang には Set 型はありませんが、スライスやマップなどの基本的なデータ構造によって Set の機能を実現できます。スライスを使用して Set を実装するには手動の重複排除が必要ですが、これはさらに面倒ですが、マップを使用して Set を実装する方が簡単で効率的です。もちろん、交差や結合など、Set に対してより複雑な操作を実行する必要がある場合は、効率を大幅に向上できる github.com/deckarep/golang-set などのサードパーティ ライブラリを使用することをお勧めします。
以上がgolangでsetを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。