Go 言語の配列の基礎となるメカニズムを深く理解する

WBOY
リリース: 2024-01-31 16:03:13
オリジナル
501 人が閲覧しました

Go 言語の配列の基礎となるメカニズムを深く理解する

Go 言語における配列の基本的な実装原理

配列のストレージ構造

Go 言語における配列は、連続したメモリ ブロックです。各要素は固定サイズのスペースを占有します。配列の要素の型には、任意の基本データ型またはカスタム型を使用できます。配列の長さは固定されており、配列の作成時に指定され、後で変更することはできません。

配列の基本的な実装原理は、連続メモリ空間を使用して配列の要素を格納することです。配列の最初の要素はメモリ空間の開始アドレスに格納され、最後の要素はメモリ空間の終了アドレスに格納されます。配列の要素間にギャップはないため、配列の合計サイズは、配列要素のサイズに配列の長さを乗算した値に等しくなります。

たとえば、次のコードは 10 個の int 型要素を含む配列を作成します。

var arr [10]int
ログイン後にコピー

この配列の基本的な実装原理は次のとおりです。

+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+---+---+---+---+---+
ログイン後にコピー

の最初の要素配列 メモリ空間の開始アドレス 0 に格納され、最後の要素はメモリ空間の終了アドレス 9 に格納されます。配列の要素間にギャップはないため、配列の合計サイズは、配列要素のサイズ (4 バイト) に配列の長さ (10) を乗算した値 (40 バイト) に等しくなります。

配列アクセス

配列の要素にはインデックスによってアクセスできます。配列のインデックスは、配列内の要素の位置を表す整数です。配列の最初の要素のインデックスは 0 で、最後の要素のインデックスは配列の長さから 1 を引いた値になります。

たとえば、次のコードは配列 arr の最初の要素にアクセスします:

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

配列 arr の最初の要素は 0 であるため、このコードは 0 を出力します。

配列の走査

配列は for ループを通じて走査できます。 for ループ内の変数は、配列のインデックスまたは配列の要素にすることができます。

たとえば、次のコードは配列 arr を走査し、各要素を出力します:

for i := 0; i < len(arr); i++ {
    fmt.Println(arr[i])
}
ログイン後にコピー

このコードは出力します:

0
1
2
3
4
5
6
7
8
9
ログイン後にコピー

Comparison of arrays

Arrays渡すことができます。 比較する配列の要素を比較します。配列の比較規則は次のとおりです。

  • 2 つの配列の長さが異なる場合は、短い配列が最初に比較されます。
  • 2 つの配列の長さが同じ場合、比較は最初の要素から開始されます。
  • 2 つの配列の要素が同じ場合は、次の要素の比較を続けます。
  • 2 つの配列の要素が異なる場合、比較結果は false になります。

たとえば、次のコードは配列 arr と配列 br を比較します。

var arr = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var br = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

fmt.Println(arr == br)
ログイン後にコピー

配列 arr と配列 br の要素が同じであるため、このコードは true を出力します。

配列のコピー

配列は、copy 関数を使用してコピーできます。 copy 関数の構文は次のとおりです。

func copy(dst, src []Type) int
ログイン後にコピー

このうち、dst はターゲット配列、src はソース配列です。 copy 関数は、src 配列の要素を dst 配列にコピーします。 dst 配列の長さが src 配列の長さより短い場合は、dst 配列の長さの要素のみがコピーされます。

たとえば、次のコードは配列 arr を配列 br にコピーします:

var arr = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var br = [10]int{}

copy(br, arr)

fmt.Println(br)
ログイン後にコピー

このコードは出力します:

[0 1 2 3 4 5 6 7 8 9]
ログイン後にコピー

配列のスライス

配列をスライスに渡してサブ配列を作成できます。スライスの構文は次のとおりです。

arr[start:end]
ログイン後にコピー

このうち、start は部分配列の開始インデックス、end は部分配列の終了インデックスです。 start を省略した場合、部分配列の開始インデックスは 0 になります。 end を省略した場合、部分配列の終了インデックスは配列の長さになります。

たとえば、次のコードは配列 arr のサブ配列を作成します:

var arr = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var subArr = arr[2:5]

fmt.Println(subArr)
ログイン後にコピー

このコードは出力します:

[2 3 4]
ログイン後にコピー

配列の概要

Arrays Go 言語の重要なデータ構造。配列の基本的な実装原理は、連続したメモリ空間を使用して配列の要素を格納することです。配列の要素には、インデックスによってアクセスすることも、for ループを通じて反復することもできます。配列は、配列の要素を比較することによって比較することも、copy 関数を使用してコピーすることもできます。配列をスライスしてサブ配列を作成できます。

以上がGo 言語の配列の基礎となるメカニズムを深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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