Go のスライス インデックス作成を理解する: s[lo:hi] が要素 hi-1 で終了する理由
Go では、スライスは次のシーケンスを表します。要素。スライスをスライスする場合、式 s[lo:hi] は、インデックス lo (包括的) から hi (除外的) までの要素を含む新しいスライスを返します。
包含-排他的スライスの理論的根拠
代わりに包含-排他的スライス (hi-1 が上限として使用される) を使用するという選択。包含-包含スライス (hi が上限として使用される) は、次のいくつかの利点に基づいています。
-
ポインター演算の単純さ: Go スライスはポインターとして保存され、包含-排他的メソッドにより、単純なポインタ演算が可能になります。スライス内の各要素は、スライス ポインターのメモリ アドレスとそのインデックスに配置されるため、ポインター操作が簡単になります。
-
スライス長ユーティリティ: スライスの長さも同様です。これは、元のスライスを取得するためにスライスできるインデックスと同じです。たとえば、s[0:len(s)] は元のスライス s を提供します。これにより、スライス操作を伴う操作が簡素化されます。
-
非重複インデックス: 包含-排他的スライスにより、後続のスライスのインデックスが重複しないことが保証されます。スライス s[lo1:hi1]、s[hi1:hi2]、s[hi2:hi3] などがある場合、これらのスライスは元のスライス s 全体をカバーします。
-
簡素化された分割アルゴリズム: このスライス方法は、連続しない整数に基づいて配列を分割するアルゴリズムを簡素化します。対照的に、包含-包含スライスでは、同じ結果を達成するためにより複雑なロジックが必要です。
例:
次のスライスを考えてみましょう:
p := []int{0, 10, 20, 30, 40, 50}
ログイン後にコピー
- p[0:3] は [0, 10, 20] を返します。要素 30 を除きます。
- p[3:6] は [30, 40, 50] を返します。要素 30 を含みます。
- p[0:len(p)] は元のスライスを返します。 p.
結論:
Go の包含排他的スライス手法は、ポインター演算の簡素化、便利なスライス操作を提供し、効率的なアルゴリズムの作成を容易にします。スライス操作の場合。
以上がGo のスライス インデックス作成 `s[lo:hi]` が `hi` 番目の要素を除外するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。