2016-10-29 4 views
0

Goスライスで作業しているときにインデックスの表記の周りに私の頭を包み込むように見えることができません。Goスライスのインデックスの表記の背後にあるアイデアは何ですか?

与えられたスライスs

s := []int{1, 2, 3, 4, 5} 

ここで、新しいスライスs2 = [2 3]を作成します。

s2 := s[1:3] // s2 = [2 3] 

さて、この値にアクセスするとき、私は通過すべき思考プロセスは何ですか?インデックス1からスライスの3番目の要素までの値を読み込んでいますか?あるいは、インデックス1からインデックス3までの値を読んでいますか?

私は、インデックス1から始まり、インデックス3まで行くと、私は位置1で始まりませんし、これらの両方がs2持つ3つの要素につながるよう3を位置までつもりもないわけではありません。

この表記法の背後にある考え方は何ですか?

答えて

2

仕様からの関連セクション:Slice expressions。ストリング、アレイ、アレイへのポインタ、またはスライスa、ストリングまたはスライスを構成

一次式

a[low : high] 
について

インデックスlowおよびhighオペランドaのどの要素が結果に表示されるかを選択します。 結果は0から始まり、長さはhigh - lowになります。

のでs2 := s[1:3]は、長さ3 - 1 = 2と新しいスライスを作成し、それは2つの要素が含まれます:s[1]s[2]を。

スライスをスライスすると、lowは、あなたが(包括)を含める最初の要素のインデックスであるべきであり、highがincudedされることはありません最後の要素のインデックスでなければなりません(high排他的です)。

あなたは結果が要素[2, 3]を含めたいのであれば、あなたはインデックス13スライスを提供する必要があります。混乱するかもしれない何

s2 := s[1:3] // will be [2, 3] 

をあなたのスライス内の要素が1で始まるということですが、インデックスは0で始まります。 //play.golang: - httpsのIn a Go slice, why does s[lo:hi] end at element hi-1?

+0

あなたはここで働いそれを見ることができます。

は、包括的、排他的な指標の背後にある理由について、関連する質問を参照してください。org/p/AwYUsn3mON – SRC

+0

@SRCはい、私はそれを見ます、それについてあなたの質問は何ですか? 's1'は1つの要素だけのスライスで、' s [2] 'はインデックス式で、2番目の要素(0をインデックスとする)は' 3'です。 – icza

+0

私の例はあまり選ばれていないかもしれません。私は、単一の値のアクセスと新しいスライスの作成の違いをよく知っています。私は実際にインデックスの背後にある考え方が最初の値がインデックスであるように見えるのを知ることを意味し、2番目のインデックスはインデックスであり、1から始まる要素の位置です。私は質問を更新しました。 – sge

関連する問題