アレイ(配列)

アレイは、同じデータ型の要素のコレクションです。囲碁の言語では、配列からの声明は、あなたはメンバーが使用して配列を変更することができますが、配列のサイズを変更できないと判断されます。基本的な構文:

// 定义一个长度为3元素类型为int的数组a
var a [3]int

配列定義:

var 数组变量名 [元素数量]T

たとえば、次のvar a [5]int配列の長さは一定で、および配列型の部分の長さでなければなりません。一度定義し、長さを変更することはできません。[5]intそして、[10]int異なるタイプです。

var a [3]int
var b [4]int
a = b //不可以这样做,因为此时a和b是不同的类型

アレイは、添字、から添字によってアクセスすることができる0:開始、最後の要素のインデックスはlen-1、アクセス違反がトリガされ、それはパニックし、アクセス違反(有効範囲外の下付き文字)。

配列の初期化

配列を初期化し、多くの方法があります。

この方法の一つ

あなたは、配列の初期化の配列要素の値を設定する初期化リストを使用することができます。

func main() {
	var testArray [3]int                        //数组会初始化为int类型的零值
	var numArray = [3]int{1, 2}                 //使用指定的初始值完成初始化
	var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化
	fmt.Println(testArray)                      //[0 0 0]
	fmt.Println(numArray)                       //[1 2 0]
	fmt.Println(cityArray)                      //[北京 上海 深圳]
}

方法二

配列の長さは一致する初期値を毎回確実にし、提供し、上記方法によれば、一般的に、我々はコンパイラを有する、例えば、それ自体の初期値の数に応じて、配列の長さを推測することができます。

func main() {
	var testArray [3]int
	var numArray = [...]int{1, 2}
	var cityArray = [...]string{"北京", "上海", "深圳"}
	fmt.Println(testArray)                          //[0 0 0]
	fmt.Println(numArray)                           //[1 2]
	fmt.Printf("type of numArray:%T\n", numArray)   //type of numArray:[2]int
	fmt.Println(cityArray)                          //[北京 上海 深圳]
	fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string
}

メソッドスリー

また、例えば、配列を初期化するために指定されたインデックス値の方法を使用することができます。

func main() {
	a := [...]int{1: 1, 3: 5}
	fmt.Println(a)                  // [0 1 0 5]
	fmt.Printf("type of a:%T\n", a) //type of a:[4]int
}

反復

配列をループは、次の二つの方法があります。

func main() {
	var a = [...]string{"北京", "上海", "深圳"}
	// 方法1:for循环遍历
	for i := 0; i < len(a); i++ {
		fmt.Println(a[i])
	}

	// 方法2:for range遍历
	for index, value := range a {
		fmt.Println(index, value)
	}
}

多次元配列

(配列のネストされた配列である)例えば、我々は2次元配列にここにいる、言語サポート多次元配列を移動します。

定義された二次元アレイ

func main() {
	a := [3][2]string{
		{"北京", "上海"},
		{"广州", "深圳"},
		{"成都", "重庆"},
	}
	fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]]
	fmt.Println(a[2][1]) //支持索引取值:重庆
}

二次元アレイを横切ります

func main() {
	a := [3][2]string{
		{"北京", "上海"},
		{"广州", "深圳"},
		{"成都", "重庆"},
	}
	for _, v1 := range a {
		for _, v2 := range v1 {
			fmt.Printf("%s\t", v2)
		}
		fmt.Println()
	}
}

出力:

北京	上海	
广州	深圳	
成都	重庆	

注:多次元配列のみ第一の層を使用することができるが、...コンパイラは、配列の長さを導出することを可能にします。例えば:

//支持的写法
a := [...][2]string{
	{"北京", "上海"},
	{"广州", "深圳"},
	{"成都", "重庆"},
}
//不支持多维数组的内层使用...
b := [3][...]string{
	{"北京", "上海"},
	{"广州", "深圳"},
	{"成都", "重庆"},
}

配列は値型であります

アレイは、アレイ全体を複製する値の種類、割り当て及び参加者の移動です。したがって、コピーの値を変更し、それが値自体は変更されません。

func modifyArray(x [3]int) {
	x[0] = 100
}

func modifyArray2(x [3][2]int) {
	x[2][0] = 100
}
func main() {
	a := [3]int{10, 20, 30}
	modifyArray(a) //在modify中修改的是a的副本x
	fmt.Println(a) //[10 20 30]
	b := [3][2]int{
		{1, 1},
		{1, 1},
		{1, 1},
	}
	modifyArray2(b) //在modify中修改的是b的副本x
	fmt.Println(b)  //[[1 1] [1 1] [1 1]]
}

注意:

  1. アレイサポート「==」、「!=」演算子、メモリが常に初期化されますので。
  2. [n]*Tポインタ配列を表し、*[n]Tそれは、配列ポインタを表します。