1. ホーム
  2. スクリプト・コラム
  3. ゴラン

Go言語基本スライスの作成と初期化例詳細

2022-01-06 09:11:07

概要

  • スライスは動的な配列である
  • オンデマンドで自動的にサイズを変更
  • 配列とは異なり、スライスの長さを実行時に変更することができる

構文

I. スライスの作成と初期化

作る

組み込みのmake()関数を使用してスライスを作成します。

var slice []type = make([]type, len, cap) 
//shortened: slice := make([]type, len, cap)


文字量

var 変数名 []型

slice1 := []string{"张三","李四"} // A string slice with length and capacity of 5 elements
slice2 := []int{10, 20, 30} // integer slice with length and capacity of 3 elements


II. スライスの使用

アサインとスライス

要素のものは、次の例のように [] 演算子を用いて変更することができます。

// Create an integer slice
// Its capacity and length are both 5 elements
slice1:=[]string{"张三","李四","王五","马六","老七"}
// change the value of the element with index 1
slice1[1] = "小张三"


スライスを使用してスライスを作成する

// Create an integer slice
// Its length and capacity are both 5 elements
slice1:=[]string{"张三","李四","王五","马六","老七"}
// Create a new slice
// Its length is 3 elements and its capacity is 3 elements
newSlice:=slice1[2:5]


スライスの成長

append を使用してスライスに要素を追加し、スライスの長さと容量を増加させます。

// Create an integer slice
// Its length and capacity are both 5 elements
slice1:=[]string{"张三","李四","王五","马六","老七"}
// Use the original capacity to assign a new element
// assign the new element to 60
newSlice:=append(slice1,"I'm new here")


スライスの反復処理

for rangeを使ったスライスの反復処理

slice1 := []string{"张三", "李四", "王五", "马六", "老七"}
for k, v := range slice1 {
	fmt.Println(k, v)
}


forループを使ったスライスの反復処理

slice1 := []string{"张三", "李四", "王五", "马六", "老七"}
for i := 0; i < len(slice1); i++ {
	fmt.Println(i,slice1[i])
}


概要

  1. スライスのデフォルトの開始位置は0であり、ar[:n] は ar[0:n] と等価である。
  2. slice は参照型であり、配列へのポインタである。
  3. 2つのスライスがすべて同じ要素を含んでいるかどうかを判断するために == を使用することはできません。
  4. スライスが空かどうかを判断するには、s == nil ではなく len(s) == 0 を使用します。

一般的な例

package main
import (
	"fmt"
)
func main() {
	// i. Create the slice
	var slice []int = make([]int, 3)
	fmt.Println(slice)
	slice1 := []string{"张三", "李四", "王五", "马六", "老七"}
	fmt.Println(slice1)
	slice2 := []int{10, 20, 30}
	fmt.Println(slice2)
	//II. Using slices
	//Use the [] operator to change an element
	slice1[1] = "小张三"
	fmt.Println(slice1)
	// use slice to create slices [subscript is from 0]
	newSlice := slice1[0:2]
	fmt.Println(newSlice)
	//slice growth
	newSlice = append(slice1, "I'm new")
	fmt.Println(newSlice)
	// Iterate over slices using for range [k:subscript, v:value]
	for k, v := range slice1 {
		fmt.Println(k, v)
	}	
	// Iterate over the slice using a for loop
	for i := 0; i < len(slice1); i++ {
		fmt.Println(i,slice1[i])
	}
}



例1 2つのスライスは等しいか

package main
import (
	"fmt"
	"reflect"
)
func main() {
	// Are the two slice equal
	slice1 := []string{"张三", "李四", "王五", "马六"}
	slice2 := []string{"张三", "李四", "王五", "马六"}
	if reflect.DeepEqual(slice1, slice2) {
		fmt.Println("Two slice equal")
	} else {
		fmt.Println("Two slice are not equal")
	}
}


例2 2つの数字が含まれているか

package main
import (
	"fmt"
	"sort"
	"strings"
)
func main() {
	slice1 := []string{"Zhang San", "Li Si", "Wang Wu", "Ma Liu", "Lao Qi"}
	fmt.Println(slice1)	
	target := "李四"
	i := sort.Search(len(slice1), func(i int) bool {
		return slice1[i] >= target
	})
	if strings.EqualFold(slice1[i], target) {
		fmt.Println(target, "exists, its subscript is ", i)
	} else {
		fmt.Println("doesn't exist", target)
	}
}


以上、Go言語スライスの作成と初期化について詳しく説明しましたが、Go言語スライスの詳細については、スクリプトハウスの他の関連記事にもご注目ください!Go言語スライスの作成と初期化については、スクリプトハウスの他の関連記事にもご注目ください。