Golang にはセット データ構造がないという不思議な問題
Golang では、セット データ構造が基本的に必要であるため、次のような不可解な疑問が生じています。ネイティブに提供されていませんか? Google の影響力のある Guava ライブラリからインスピレーションを得ているのに、なぜ Golang の設計者はそのような基本的な構造のサポートを省略し、開発者が独自の実装を作成することを余儀なくされたのでしょうか?
その答えは、マップを使用してセットを構築する単純さにあります。提供されたコード スニペットに示されているように、マップを利用してセットを作成できます。存在の確認、追加、削除、集合演算 (和集合、積集合) の実行などの主要な操作を簡単に実装できます。
s := map[int]bool{5: true, 2: true} _, ok := s[6] // check for existence s[8] = true // add element delete(s, 2) // remove element // Union s_union := map[int]bool{} for k, _ := range s1{ s_union[k] = true } for k, _ := range s2{ s_union[k] = true } // Intersection s_intersection := map[int]bool{} if len(s1) > len(s2) { s1, s2 = s2, s1 // better to iterate over a shorter set } for k,_ := range s1 { if s2[k] { s_intersection[k] = true } }
これらのマップベースの実装は、ほとんどの実用的なシナリオには十分ですが、ネイティブ セットの実装がコードを簡素化し、可読性を向上させると主張する人もいるかもしれません。それにもかかわらず、Golang 開発者にとって、セットとしてのマップの使用を理解することは、問題解決とリソースの効率的な利用の両方にとって非常に重要です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3