ホームページ > バックエンド開発 > Golang > golangは入っていない

golangは入っていない

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2023-05-16 09:27:07
オリジナル
491 人が閲覧しました

Golang は非常に人気のあるオープンソース プログラミング言語で、Web 開発やバックエンド サービスなど、さまざまなシナリオで使用でき、幅広い用途があります。ただし、Golang には、Python や SQL などの言語で一般的な in 演算子がありません。 in 演算子がないため、プログラミングにどのような影響があるでしょうか?この記事では、このトピックを検討し、in 演算子を実装する別の方法を紹介します。 ######何が入っているの?

in は、多くのプログラミング言語で使用できる一般的な演算子です。これは、値がコレクションまたは配列に存在するかどうかを判断するためによく使用されます。たとえば、Python では、 in を使用して、数値がリストに含まれているかどうかを確認できます。

if x in [1, 2, 3]:
    print('x is in the list')
ログイン後にコピー

上記のコードでは、x の値が 1、2、または 3 のいずれかである場合、「」が出力されます。 x がリストにあります。」

Golang のスライスとマップ

Golang では、スライスは自動的に拡大または縮小できる動的配列です。スライス要素には添字 (0 から始まる) を介してアクセスできます。たとえば、次はスライスの例です。

numbers := []int{1, 2, 3, 4, 5}
ログイン後にコピー
ログイン後にコピー

上記のコードでは、numbers は 5 つの整数を含むスライスです。 3 番目の要素にアクセスするには、次のコードを使用できます:

fmt.Println(numbers[2])
ログイン後にコピー

出力結果は次のとおりです:

3
ログイン後にコピー

同様に、Golang のマップも、キーと値を組み合わせた非常に一般的なデータ構造です。 1 対 1 のマッピング、キーによって値にアクセスできます。たとえば、次はマップの例です。

ages := map[string]int{
    "Alice": 31,
    "Bob":   34,
    "Cindy": 27,
}
ログイン後にコピー

上のコードに示されているように、ages は文字列を整数にマップするマップです。たとえば、ボブの年齢を調べるには、次のコードを使用できます:

fmt.Println(ages["Bob"])
ログイン後にコピー

出力結果は次のとおりです:

34
ログイン後にコピー

上記は、Golang で一般的に使用されるコレクション タイプです。これらの型は多くの状況で役立ちますが、in 演算子がないことにより、プログラミングで不都合が生じる可能性があります。

代替メソッド

in 演算子はありませんが、Golang には同様の操作を実行するメソッドがいくつか用意されています。

for ループの使用
  1. 最も基本的な方法は、for ループを使用してコレクションを反復処理し、探している要素を見つけることです。のために。たとえば、数値 3 が次のリストにあるかどうかを確認するには:
numbers := []int{1, 2, 3, 4, 5}
ログイン後にコピー
ログイン後にコピー

次のコードを使用できます:

for _, number := range numbers {
    if number == 3 {
        fmt.Println("3 is in numbers")
        break
    }
}
ログイン後にコピー

ここでは、反復するために range キーワードと _blank 識別子が使用されていることに注意してください。スライス内のすべての要素にわたって。

同様に、マップ内にキーが存在するかどうかを確認するには、次のコードを使用できます。

ages := map[string]int{
    "Alice": 31,
    "Bob":   34,
    "Cindy": 27,
}

for name, age := range ages {
    if name == "Bob" {
        fmt.Printf("Bob's age is %d
", age)
        break
    }
}
ログイン後にコピー

このコードは、年齢のすべてのキーと値のペアを反復処理し、キーが等しいかどうかを確認します。 「ボブ」に。

for ループの使用は、同様の in 演算子を実装する簡単な方法ですが、大規模なコレクション内の要素を検索する場合には十分に効率的ではない可能性があります。

並べ替えと二分検索の使用
  1. セット内の要素が順序付けされている場合は、並べ替えと二分検索のアルゴリズムを使用して要素を検索できます。以下に例を示します。
numbers := []int{1, 2, 3, 4, 5}
sort.Ints(numbers)

if i := sort.SearchInts(numbers, 3); i < len(numbers) && numbers[i] == 3 {
    fmt.Println("3 is in numbers")
}
ログイン後にコピー

このコードは、sort.Ints を使用して配列を並べ替えた後、sort.SearchInts を使用して二分検索を実行し、配列内に 3 が存在するかどうかを確認します。

同様に、sort.SearchStrings を使用してマップのキーを並べ替え、二分検索を実行することもできます。例:

names := []string{"Alice", "Bob", "Cindy"}
sort.Strings(names)

if i := sort.SearchStrings(names, "Bob"); i < len(names) && names[i] == "Bob" {
    fmt.Println("Bob is in names")
}
ログイン後にコピー

このコードは、sort.Strings を使用して文字列の配列を並べ替えた後、sort.SearchStrings を使用して二分検索を実行し、配列内に「Bob」があるかどうかを確認します。

ソートと二分探索の使用は、要素がソートされている場合にのみ適用できるため、設定された要素がランダムに分散されている場合、効率が非常に低くなる可能性があることに注意してください。

map のゼロ値を使用する
  1. マップにキーが存在するかどうかだけを確認する必要がある場合は、map のゼロ値を使用できます。ゼロ値は、指定されたキーがマップ内に存在しない場合、その型のゼロ値を返します。例:
ages := map[string]int{
    "Alice": 31,
    "Bob":   34,
    "Cindy": 27,
}

if ages["Bob"] != 0 {
    fmt.Printf("Bob's age is %d
", ages["Bob"])
}
ログイン後にコピー

このコードは、キー「Bob」がマップ内に存在するかどうかを確認し、存在する場合はボブの年齢を出力します。

ただし、このアプローチではいくつかの問題が発生する可能性があります。キーに対応する値が元々ゼロである場合、プログラムはキーが存在しないと誤って認識する可能性があるためです。したがって、このメソッドはマップ内の値がゼロでない場合にのみ機能します。

結論

Golang には組み込み演算子がありませんが、for ループ、ソートとバイナリ検索、およびマップのゼロ値を使用することで同様の機能を実現できます。特定のシナリオに応じて、適切な方法を選択すると、コードがより効率的で読みやすく、保守しやすくなります。

以上がこの記事で紹介した内容であり、Golang における in 演算子の欠如の問題について理解を深めていただければ幸いです。

以上がgolangは入っていないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート