Go で 3 つの値間の等価性を効率的にチェックするにはどうすればよいですか?

DDD
リリース: 2024-11-04 01:55:30
オリジナル
814 人が閲覧しました

How to Efficiently Check Equality Between Three Values in Go?

3 つの値が等しいかどうかを確認する効率的な方法

Go では、複数の変数が等しいかどうかを比較するのが難しい場合があります。 if a == b == c という単純なアプローチではコンパイル エラーが発生しますが、エレガントで効率的な解決策を提供する代替方法がいくつかあります。

明確で簡潔なアプローチ

推奨される方法と3 つの値が同一かどうかを判断する最も簡潔な方法は次のとおりです。

<code class="go">if a == b && a == c {
    fmt.Println("All 3 are equal")
}</code>
ログイン後にコピー

このメソッドは、Go が 2 つの値を比較するときにブール値を返すという事実を活用し、明確で読みやすいコードを保証します。

代替案実験用

上記の解決策は最適ですが、実験用に検討できるさまざまな創造的なオプションがあります:

セットとしてのマップ:

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

このメソッドの背後にある概念は、値をキーとしてマップに追加することです。値がすべて等しい場合、マップにはキーが 1 つだけ含まれ、長さは 1 になります。

配列:

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

配列は本質的に比較可能であり、== を使用して 3 つの値を比較できます。ただし、このアプローチは、特定の数の値を比較する場合にのみ適しています。

トリッキー マップ:

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

このメソッドは、マップを利用して次の結果を割り当てます。 b == c をキーに設定し、同じキーに関連付けられた値にアクセスします。 a == b の場合、b == c の結果が返され、等しいことが示されます。

匿名構造体:

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

ネストされた構造体は比較可能であり、次のことが可能です。簡潔な構文で 3 つの値を比較します。

スライス:

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

スライス自体は比較できませんが、reflect.DeepEqual() 関数はそれらの同等性を判断できます。

ヘルパー関数:

<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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート