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 ループの使用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 演算子を実装する簡単な方法ですが、大規模なコレクション内の要素を検索する場合には十分に効率的ではない可能性があります。
並べ替えと二分検索の使用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 のゼロ値を使用する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 サイトの他の関連記事を参照してください。