スライスとリストの間には違いがありますか?私は、彼らはスライスが、午前の両方であると言いたいゴランのスライスとリストの違いはありますか
var slice []int
list := []string{"a", "b", "c", "d", "e"}
:
何私が理解することは、配列(固定サイズ)とスライス(動的なサイズ)がありますが、thoses 2つのものとの間に差があるさ本当ですか?
おかげ
スライスとリストの間には違いがありますか?私は、彼らはスライスが、午前の両方であると言いたいゴランのスライスとリストの違いはありますか
var slice []int
list := []string{"a", "b", "c", "d", "e"}
:
何私が理解することは、配列(固定サイズ)とスライス(動的なサイズ)がありますが、thoses 2つのものとの間に差があるさ本当ですか?
おかげ
var slice []int
list := []string{"a", "b", "c", "d", "e"}
これらは両方ともスライスです。
宣言でサイズが記述されている場合のみ配列です。このサイズは後で変更することはできないため、固定サイズです。あなたは彼らの内部表現を見たときのアレイとスライス間の違いを理解する
var array [5]int
array2 := [3]string{"a","b","c"}
は簡単です。
配列:
配列はメモリに順次レイアウトされた値のリストです。
配列:= [4] INT {1,2,3,4}
+-----------------------+
[4]int | 1 | 2 | 3 | 4 |
+-----------------------+
もしアレイを定義した後、それのサイズを変更することはできません。 [4]int
は、常に4つの整数の配列のままです。 [4]int
と[5]int
は互換性のないタイプです。
スライス:
スライスタイプが行くの配列型の上に構築された抽象化です。これは配列のセグメントの記述子です。基礎となる配列へのポインタ、
キャップ - と、その容量(最大長
これは3つの成分
+-----+
[]int | ptr |
+-----+
| len |
+-----+
| cap |
+-----+
|
|
+-----------------------+
[4]int | 1 | 2 | 3 | 4 |
+-----------------------+
スライスは、同一又は 異なるサイズの異なる配列を指すように変更することができます。したがって、スライスは動的サイズを有する。
slice1 := []int{1,2,3}
+-----------------+
slice1 | ptr | 3 | 3 |
+-----------------+
slice1 = []int{1,2}
+-----------------+
slice1 | ptr | 2 | 2 |
+-----------------+
そして、同じアレイを指す複数のスライスが存在する可能性があります。
The Go Programming Language Specification
スライスは、基礎となる 配列の連続セグメントの記述子であり、その 配列からの要素の番号付け配列へのアクセスを提供します。スライスタイプは、要素タイプが の配列のすべてのスライスのセットを示します。初期化されていないスライスの値はゼロです。
SliceType = "[" "]" ElementType .
移動スライスは、元の配列のスライスです。 Goにはリストがありません。 Goでは、スライスを使用してリストを実装できます。
これらは両方ともGoスライスです。どちらもリストではありません。
var intSlice []int
strSlice := []string{"a", "b", "c", "d", "e"}
intSlice
nil
あるスライスについてゼロ値に初期化されます。基本配列の要素はstrSlice
で、スライス複合リテラル値{"a", "b", "c", "d", "e"}
に初期化されます。
1つはintのスライスで、もう1つはstringのスライスです。ゴランには「リスト」はありません。 – tkausl
これらは両方ともスライスです。ゴランには 'list'データ構造がありません –