アレイ、スライス

1、配列

配列値の型を属します。

1)ステートメント

VaRの配列変数[要素数]タイプ

  • 配列変数名:変数名、配列の宣言と使用。
  • 要素の数:式とすることができる配列の要素の数が、最終結果は、ランタイムの数値の大きさを含むことができない要素の数を確認するために、整数値でなければならない期間をコンパイルすることによって計算されます。
  • 入力:塩基は、配列自体を含む、任意のタイプであってもよく、アレイ型自体は、多次元配列を実現することができます。

デフォルトでは、配列の各要素は、要素のタイプに対応するゼロ値に初期化され、それが数値型で0であるが、配列を初期化するように設定値を用いて、配列リテラルシンタックスを使用することができます。

配列の定義において、「...」省略位置配列の長さと、それが配列の長さは初期値の数に基づいて計算されます。

例:

パッケージメイン

輸入「FMT」

FUNCのmain(){
	[3] int型でVAR
	iについて:= 0; I <(A)でlen。I ++ {
		fmt.Printf( "%のD、%D \ n" は、I、[I])
	}
	VaRのB = [3]あなた{1,2}
	fmt.Println( "----------------------------")
	iについて:= 0; I <lenの(B)I ++ {
		fmt.Printf( "%のD、%D \ n" は、I、B [i])と
	}
	C = [...] INT {1、2、3}
	fmt.Println( "----------------------------")
	iについて:= 0; I <lenの(C)I ++ {
		fmt.Printf( "%のD、%D \ n" は、I、C [i])と
	}
}

  

2)2つの配列の比較は等しいです

IF(長さ、配列の配列要素の種類を含む)は、同じタイプの2つのアレイ、より多くの我々は、直接オペレータを介して(CAN == と!=)は、2つのアレイは、同じであるかどうかを決定する場合にのみ、二つの配列のすべての要素アレイが同じに等しい場合、我々は、他のプログラムがコンパイルされません、アレイの二つの異なるタイプを比較することはできません。

彼らは、同じタイプの配列アレイとの間に互いに割り当てることができます。

 

3)多次元配列

例:

パッケージメイン

輸入「FMT」

FUNC出力(STR文字列、ARR [4] [2] INT){
	fmt.Printf( "ArrName:%sの\ n" は、STR)
	iについて:= 0; I <4。I ++ {
		jに対して:= 0; J <2。J ++ {
			fmt.Printf( "%dを、" ARR [I] [J])
		}
		fmt.Println()
	}
}

FUNCのmain(){
	//二次元整数配列を宣言し、二次元の長さは4であり、2
	[4] [2] INTにおけるVAR
	出力( "A")
	//宣言するために、配列リテラルを使用して、整数の2次元配列を初期化します
	B:= [4] [2] INT {{10、11}、{20、21}、{30、31}、{40、41}}
	出力( "B"、B)
	//配列インデックス要素1及び3を宣言し、初期化します
	C:= [4] [2] INT {1:{20、21} 3 {40、41}}
	出力( "C"、C)
	//指定された配列の要素を宣言して初期化します
	D:= [4] [2] INT {1:{0:20}、3:{1:41}}
	出力( "D"、D)
}

  

 2、スライス

スライス(スライス)スライスは参照型であるように、連続したセグメントの配列への参照です。囲碁の言語は、一般的にすばやく設定されたデータスライスを操作するためのスライスアドレス、サイズ、および容量の内部構成を含んでいます。

1)配列から新しいスライス又はスライスを生成します

連続したメモリ領域からスライスを生成することは、次の形式で、一般的な動作です。

スライス[スタートポジション:終了位置]

  • スライス:スライスがターゲット・オブジェクトを表します。
  • 開始位置:インデックスに対応する対象物をスライスします。
  • 終了位置:ターゲットスライスの対応するインデックスの終わり。

配列から新しいスライスやスライスを生成すると、次の特性があります。

  • 要素の数がとられる:終了位置 - 開始位置を、
  • 削除要素は、スライスを使用して、スライスの最後の要素の終了位置に対応するインデックス[LEN(スライス)]を取得含まれ
  • 終了位置までヘッドから連続領域を示すときに、デフォルトの開始位置。
  • 開始位置からデフォルトの終了位置は、全体の連続領域の終了を示す場合。
  • 同時に両方をデフォルトすると、スライス自体に相当。
  • 両方とも0は、典型的には、リセットを区画するための、空のセクションに相当します。

例:

パッケージメイン

輸入「FMT」

FUNCのmain(){
	VAR A = [3] INT {1,2,3}
	fmt.Println([1:2])
	fmt.Println([3])
	fmt.Println([0:])
}

  

2)直接の文スライス

スライスタイプを宣言することができるように、元の配列またはスライスからスライスを生成するだけでなく、新しいスライスを宣言することができることに加えて、そのスライスタイプを有することができ、各タイプは、要素の同じタイプの連続する複数組を示し次の形式でスライスタイプの宣言:

VAR名[]タイプ

スライスは、動的な構造であり、そして唯一のゼロ決意に等しくすることができ、それは互いに等しくないと判断されます。

新しいスライスを宣言した後、あなたはセクションに要素を追加するAPPEND()関数を使用することができます。

例:

パッケージメイン

輸入「FMT」

FUNCのmain(){
	VaRのA [] intが//デフォルト値を宣言したが、未使用のスライスはnilです
	VaRのB = [] INT {} //メモリが割り当てられています
	fmt.Println(== nilを)//真
	fmt.Println(B == nilを)//偽
}

  

3)メイク()関数は、スライスを作成し使用してください

あなたが動的にスライスを作成する必要がある場合は、メイク()組み込み関数は、次の形式を使用することができます。

メイク([]タイプ、サイズ、キャップ)

型要素タイプのスライスを指し、サイズはキャップ、このタイプに割り当てられている要素の数を指し、事前に割り当てられた要素の数は、この値を設定した後のサイズには影響を与えませんが、スペースの削減、事前にスペースを割り当てることができ、繰り返し原因を割り当てられた場合にはパフォーマンスの問題。

注:使用してください()割り当て操作が行われなければならないスライスメモリを生成する機能はなく、与えられた(スライスリセットを含む)開始位置と終了位置のみ新しいスライススライスされた構造は、開始と終了を設定し、メモリ領域への優れた点が割り当てられています位置、メモリ割り当て動作は発生しません。

例:

パッケージメイン

輸入「FMT」

FUNCのmain(){
	:=メイク([] int型、2、10)
	fmt.Println(A)
	fmt.Println( "など=" のみ())
	fmt.Println( "キャップ=" キャップ(A))
}

  

 4)要素を追加

ゴー言語は組み込み関数はappend()関数は、動的スライスの使用はappend(に要素を追加しているときに動的に、スライスされた要素を追加することができます)スペースは要素の十分な数に対応するために不十分である場合、セクションは、「拡張」、新この時間になりますスライスの長さは変化します。

テール追加要素例:

パッケージメイン

輸入「FMT」

FUNCのmain(){
	VARに[] int型
	A =追記(1)//要素を追加
	A =追記(1、2)//追加複数の要素
	A =追記([] INT {1、2、3} ...)//追加スライス
	fmt.Println(A)
}

  

ヘッド追加要素例:

パッケージメイン

輸入「FMT」

FUNCのmain(){
	VAR = [] INT {1、2、3}
	A =追記([] INT {1}、...)//の先頭に要素を追加
	A =追記([] INT {1、2}、...)//最初に一つのスライスを追加
	fmt.Println(A)
}

  

例えば要素インサート中間セクション。

パッケージメイン

輸入「FMT」

FUNCのmain(){
	VAR = [] INT {1、2、3、4、5}
	// 2番目の位置にスライスを挿入
	A =追記([2]、追記([] INT {998、999}、[2] ...)...)
	/ *
	[I:第二の追記呼び出しは、一時的なスライスを作成し、各加算演算は、新しく作成されたスライスに内容をコピーし、
	[:I]のセクションを添加引く上で作成されました。
	* /
	fmt.Println(A)
}

  

5)スライスコピー

組み込み関数の配列に追加した場合、別の配列スライス断面に2つの部分配列をコピーする)(G​​O言語をコピーすることは大きなとしては、前記スライス配列要素のより小さい数に応じてコピーされますされていません。

フォーマットを使用して()関数をコピー:コピー(destSlice、srcSlice [] T)INT

srcSliceスライスデータソース、destSlice標的コピー(destSliceにすなわちコピーsrcSlice)は、送信元と宛先のタイプは同じでなければならない、()関数が返す実際に発生要素のコピー数を示す値をコピーします。

例:

パッケージメイン

輸入「FMT」

FUNCのmain(){
	slice1:= [] INT {1,2,3,4,5}
	スライス2:= [] INT {100、101、102}
	カウント:=コピー(スライス2、slice1)
	fmt.Println(カウント)
	カウント=コピー(slice1、スライス2)
	fmt.Println(カウント)
}

  

 

 

おすすめ

転載: www.cnblogs.com/ACGame/p/11875932.html