0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rubyのスライス構文とは

Posted at

str[1..3] ってどういう意味?

Rubyを書いていると、文字列や配列の一部分を取り出す場面がよくあります。
そのときに使うのが スライス構文
みたいな [ ] を使って一部分を取り出す書き方 のことを「スライス構文」って呼ぶらしい

Rubyだと「配列」や「文字列」に対して使える
例えば、次のコードを見てみる

str = "abcdefghijk"
p str[1..3]

これって何が出力されると思いますか?


Rubyのインデックスは0から始まる

Rubyでは文字列も配列も インデックスは0からスタートします。

インデックス:  0 1 2 3 4 5 ...
文字列      :  a b c d e f ...

なので、str[1]"b" になります。


..(ドット2つ)は範囲演算子(右端を含む)

p str[1..3]  # => "bcd"

1..3インデックス1から3まで を意味するので、取り出されるのは "bcd"


...(ドット3つ)は右端を含まない

p str[1...3]  # => "bc"

1...3インデックス1以上3未満 を意味するので、取り出されるのは "bc"


まとめ

  • Rubyのインデックスは 0始まり
  • .. → 範囲(右端を含む)
  • ... → 範囲(右端を含まない)
書き方 意味 結果(str = "abcdefghijk")
str[1..3] インデックス1〜3を含む "bcd"
str[1...3] インデックス1〜2まで "bc"
str[0..2] インデックス0〜2を含む "abc"

おまけ:配列でも同じ!

arr = [10, 20, 30, 40, 50]
p arr[1..3]   # => [20, 30, 40]
p arr[1...3]  # => [20, 30]

文字列でも配列でも挙動は同じです。


おわりに

最初は「1..3って1文字目〜3文字目?」と勘違いしやすいですが、
あくまでインデックス(0始まり) であることを覚えておけば混乱しません。

これで str[1..3] も怖くない!!


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?