【Rubyメモ】sliceについて理解する!こつこつ学んでいこう!

IT/プログラミング

Rubyのsliceについて

いろいろと実行してみました!

sliceの意味

sliceの英単語を調べてみると
以下のような意味になります!

  • 一切れ
  • 部分
  • 薄く切る

sliceを使ってみよう

こんな配列を用意します。
配列の順番は0はじまりです。

0番目:0
1番目:2
2番目:4
3番目:6
4番目:8
5番目 : 10

それではsliceを実行してみましょう!

even_array = [0, 2, 4, 6, 8, 10]

p even_array.slice(0)
p even_array.slice(1)
p even_array.slice(2)
p even_array.slice(3)
p even_array.slice(4)
p even_array.slice(5)
p even_array

# result
0
2
4
6
8
10
[0, 2, 4, 6, 8, 10]

引数にマイナスを入れて実行してみよう!

マイナスは後ろから数えます。

-1番目 : 10
-2番目 : 8
-3番目 : 6
-4番目 : 4
-5番目 : 2
-6番目 : 0

even_array = [0, 2, 4, 6, 8, 10]

p even_array.slice(-1)
p even_array.slice(-2)
p even_array.slice(-3)
p even_array.slice(-4)
p even_array.slice(-5)
p even_array.slice(-6)
p even_array

# result
10
8
6
4
2
0
[0, 2, 4, 6, 8, 10]

引数に0を入れるとどうなるの?

even_array = [0, 2, 4, 6, 8, 10]

p even_array.slice(-0)
p even_array.slice(0)
p even_array.slice(+0)
p even_array

# result
0
0
0
[0, 2, 4, 6, 8, 10]

0だとマイナスゼロでも、ゼロでも、プラスゼロでも、
先頭の値を取ってくるという結果になりました!

(x..y)と範囲を指定して実行してみよう!(..)

ピリオド2つの範囲指定で実行すると、
以下の結果になります!

even_array = [0, 2, 4, 6, 8, 10]

p even_array.slice(0..1)
p even_array.slice(1..2)
p even_array.slice(2..3)
p even_array.slice(3..4)
p even_array.slice(4..5)

# result
[0, 2]
[2, 4]
[4, 6]
[6, 8]
[8, 10]

(x…y)と範囲を指定して実行してみよう!(…)

ピリオド3つの範囲指定で実行すると、
以下の結果になります!

even_array = [0, 2, 4, 6, 8, 10]

p even_array.slice(0...2)
p even_array.slice(1...3)
p even_array.slice(2...4)
p even_array.slice(3...5)
p even_array.slice(4...6)
p even_array.slice(5...7)

# result
[0, 2]
[2, 4]
[4, 6]
[6, 8]
[8, 10]
[10]

ピリオド2つだと、指定した右側の数字は、含みます。
ピリオド3つだと、指定した右側の数字は、含みません。

無理やり、交際として覚えることにします。

(謎の論理だな・・・・・・・論理崩壊しているぞ!)

ピリオド2つ
1..2は、ピリオドが2つ。左と右の数も2つ。
「ピリオドの数2つ」と「左と右の数が2つ」
一致しています!

1と2は付き合うことができます。
結ばれました!
含まれる!


ピリオド3つ
1…3は、ピリオドが3つ。左と右の数は2つ。
「ピリオドが3つ」「左と右の数は2つ」
一致しませんでした!

ピリオドが3つということで、三角関係。
三角関係ということは、誰かがうまくいきません…
結ばれない!
含まれない!

(無理やりすぎるだろ!)

まぁ何が言いたいかというと、

覚えるのであれば何か
自分なりにストーリーを作って
覚えておきましょう!

引数に英語やかなを入れるとどうなるの?

even_array = [0, 2, 4, 6, 8, 10]
p even_array.slice("あ")

# result
`slice': no implicit conversion of String into Integer (TypeError)

even_array = [0, 2, 4, 6, 8, 10]
p even_array.slice(あ)

# result
undefined local variable or method `あ' for main:Object (NameError)

RubySilverに挑戦した

Ruby Silverに挑戦したお話はこちらからどうぞ

コメント

タイトルとURLをコピーしました