私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
前回の記事でifとforを紹介しましたが、これは実践してはいけません。continue
100以内の偶数の合計を計算する文です。コードを書くとき、continue
このステートメントは、必要のない特定の反復をスキップするのに役立ちます。たとえば、この例では、すべての奇数をスキップします。
- sum := 0
- for i := 1; i < 100; i++{
- if i & 1 == 0 {
- continue
- }
- sum += i
- }
-
- fmt.Println("the sum is",sum)
プログラミングでは、同じ型の要素のセットを扱う必要があることがよくありますが、これらの要素のセットは Go 言語の特定のデータ構造で表されます。今日は、Go のいくつかのコレクション型 (配列、スライス、マップ) を詳しく紹介します。
まず、配列から始めましょう。配列は Go の最も基本的なデータ構造であり、同じ型の要素の固定長のシーケンスです。配列が宣言されると、その長さは変更できません。配列の宣言と初期化は非常に簡単です。
配列を宣言するときは、配列の型と配列の長さを指定する必要があります。配列の宣言方法は次のとおりです。
var arrayName [arrayLength]elementType
たとえば、長さ 5 の整数配列を宣言します。
var numbers [5]int
配列はさまざまな方法で初期化できます。
var numbers = [5]int{1, 2, 3, 4, 5}
:=
短い声明:numbers := [5]int{1, 2, 3, 4, 5}
numbers := [...]int{1, 2, 3, 4, 5}
numbers := [5]int{0: 1, 4: 5}
配列内の要素には、0 から始まるインデックスによってアクセスできます。
value := numbers[2] // 获取索引为 2 的元素
使用できますfor
配列内のすべての要素をループします。
- for i, value := range numbers {
- fmt.Printf("Index: %d, Value: %dn", i, value)
- }
内蔵のものを使用できますlen
配列の長さを取得する関数:
length := len(numbers)
配列が明示的に初期化されていない場合、その要素は自動的にその型のゼロ値に設定されます。たとえば、整数配列のゼロ値は 0 です。
var numbers [5]int // 所有元素都是 0
Go 言語は多次元配列もサポートしています。以下は、2x3 整数配列を宣言して初期化する例です。
- var matrix [2][3]int
- matrix = [2][3]int{{1, 2, 3}, {4, 5, 6}}
配列の長さは固定されているため、場合によってはあまり柔軟ではない可能性があります。可変長のコレクションが必要な場合は、スライスを使用できます。
次はスライスです。これは、動的配列と考えることができる、より柔軟な組み込み型です。スライスの長さは可変で、配列に基づいて作成されるため、より便利です。スライスを宣言して初期化する方法は次のとおりです。
- s := make([]int, 3) // 创建一个长度为3的整型切片
- s[0] = 1 // 切片元素赋值
- s[1] = 2
- s[2] = 3
- s = append(s, 4) // 向切片追加元素
Go 言語では、配列とスライスはどちらも同じ型の一連の要素を格納するために使用されますが、メモリ割り当て、サイズの変動性、および使用法には大きな違いがあります。配列とスライスの主な違いは次のとおりです。
[3]int
そして[4]int
は異なるタイプです。[]int
すべての整数スライスに共通のタイプです。make
初期化する関数または配列のスライス。サイズは指定されていません。配列とスライスの初期化の例を次に示します。
- // 数组
- var arr [3]int = [3]int{1, 2, 3}
-
- // 切片
- var slice []int = []int{1, 2, 3}
- // 或者使用 make 函数
- slice := make([]int, 3)
append
関数は要素を追加するか、スライス操作を通じてサブスライスを取得します。スライスの基礎となる配列はヒープ上に割り当てられる可能性があり、スライス要素にアクセスする時間計算量も O(1) ですが、append
基になる配列の再割り当てが発生する可能性があり、これは通常 O(n) 操作です。最後にマッピングを見てみましょう。マップは、キーを値にマップする Go の連想配列です。マップのキーには、整数、浮動小数点数、文字列、ポインター、インターフェイス (インターフェイス内に含まれる値が同等である限り)、構造体、配列など、等価演算子でサポートされる任意の型を使用できます。マップされた値は任意の型にすることができます。
マップを宣言するための構文は次のとおりです。
var mapName map[keyType]valueType
たとえば、キーを文字列として、値を整数としてマップを宣言します。
var scores map[string]int
マップを宣言した後、渡す必要がありますmake
関数を使用して初期化して使用できるようにします。
scores = make(map[string]int)
あるいは、短い宣言を使用して初期化することもできます。
scores := make(map[string]int)
宣言時の初期化にリテラルを使用することもできます。
- scores := map[string]int{
- "alice": 90,
- "bob": 85,
- "charlie": 88,
- }
scores["alice"] = 90
value := scores["alice"]
キーが存在しない場合は、その値タイプのゼロ値が返されます。
カンマ -ok イディオムを使用して、キーがマップ内に存在するかどうかを確認できます。
- value, exists := scores["alice"]
- if exists {
- // 键存在
- } else {
- // 键不存在
- }
使用delete
関数はマップからキーと値のペアを削除できます。
delete(scores, "alice")
キーが存在しない場合は、delete
この関数は何も行いません。
使用for
ループはマップ内のすべてのキーと値のペアを横断できます。
- for key, value := range scores {
- fmt.Printf("%s: %dn", key, value)
- }
マップのゼロ値はnil
。1つnil
マップには基礎となるデータ構造がないため、要素を追加できません。マップに要素を追加する前に、次を使用する必要があります。make
初期化してください。
内蔵のものを使用できますlen
マップ内のキーと値のペアの数を取得する関数:
length := len(scores)
マップのキーには、整数、浮動小数点数、文字列、ポインター、インターフェイス (インターフェイス内に含まれる値が同等である限り)、構造体、配列など、同等のタイプを使用できます。スライス、マップ、関数は等価比較をサポートしていないため、マップ キーとして使用できません。
Go 言語では、配列、スライス、マップが一般的に使用される 3 つのデータ構造であり、それぞれに異なる特性と考慮事項があります。使用する際の注意点は次のとおりです。
nil
、使用前に初期化する必要があります。nil
,nil
Map はキーと値のペアの保存には使用できないため、使用前に初期化する必要があります。delete
存在しないキーを削除してもエラーは生成されませんが、キーが存在するかどうかを確認することは安全です。