Go で 3 つの値が等しいかどうかをエレガントにチェックするには?

Susan Sarandon
リリース: 2024-11-04 06:12:29
オリジナル
372 人が閲覧しました

How to Elegantly Check Equality of Three Values in Go?

値の等価性を求める連鎖比較の代替方法

3 つの値が等しいかどうかを比較する場合、if a == b == c を使用すると、次の結果が得られます。型の不一致によるコンパイルエラー。 a == b && a == c が有効な代替手段である場合、面倒に見える可能性があります。この記事では、3 つの値の等価性をエレガントにチェックするためのいくつかの創造的な方法を検討します。

オプション 1: セットとしてマップ

3 つの値をキーとして使用してマップを作成する、マップの長さが 1 かどうかを検証することで、すべての値が等しいかどうかを確認できます。このアプローチは柔軟で、3 つ以上の値に対応できます。

<code class="go">if len(map[interface{}]int{a: 0, b: 0, c: 0}) == 1 {
    fmt.Println("Map set: all 3 are equal")
}</code>
ログイン後にコピー

オプション 2: 配列

Go の配列は、スライスとは異なり、比較できます。配列と 3 つの値の対応する要素を比較することで、等しいかどうかをチェックできます。

<code class="go">if [2]interface{}{a, b} == [2]interface{}{b, c} {
    fmt.Println("Arrays: all 3 are equal")
}</code>
ログイン後にコピー

オプション 3: トリッキーなマップ

マップの動作を活用して、次のことを行うことができます。 b == c の単一の比較を実行し、3 つの値の全体的な同等性のプロキシとして b の結果の値にアクセスします。

<code class="go">if map[interface{}]bool{a: b == c}[b] {
    fmt.Println("Tricky map: all 3 are equal")
}</code>
ログイン後にコピー

オプション 4: 匿名構造体

Go の構造体の値も同様です。 2 つのフィールドを持つ匿名構造体を作成し、3 つの値を含む構造体を比較し、等しいかどうかを確認します。

<code class="go">if struct{ a, b interface{} }{a, b} == struct{ a, b interface{} }{b, c} {
    fmt.Println("Anon structs: all 3 are equal")
}</code>
ログイン後にコピー

オプション 5: ヘルパー関数

ヘルパー関数を定義して、任意の数の値をシード値と繰り返し比較することでそれらの値が等しいかどうかを確認できます。

<code class="go">func AllEquals(v ...interface{}) bool {
    if len(v) > 1 {
        a := v[0]
        for _, s := range v {
            if a != s {
                return false
            }
        }
    }
    return true
}</code>
ログイン後にコピー

以上がGo で 3 つの値が等しいかどうかをエレガントにチェックするには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!