子育て×調理師×プログラミング

プログラミング勉強中なので、アウトプットもしながら更新していきます。

sliceメソッド

文字列の最後の2文字を3回繰り返して出力させる!

今日はrubyドリルででてきた問題です。

sliceメソッド

配列から指定された要素を返します。指定の要素を切り取る(slice)イメージです。

出力例:
extra_end('Hello') → 'lololo'
extra_end('ab') → 'ababab'
extra_end('Hi') → 'HiHiHi'

こんな感じで最後から2文字目を3回繰り返すということです。

# 配列を作成します
array = [0,1,2,3,4,5,6]

# 配列から引数で指定した要素をsliceします
ele1 = array.slice(1)
puts ele1
#=> 1

# 配列番号1から4つ分の要素をsliceします
ele2 = array.slice(1,4)
puts ele2
#=> 1 2 3 4

# 配列はもとのままです
puts array 
#=> [0,1,2,3,4,5,6]

上記がsliceメソッドを使った例です。

今回は、animalsの最後から2番目の文字を3回繰り返して出力させようと思います。

def extra_end(str)
  extra_end = str.slice(str.length - 2,2)
  puts extra_end * 3
end

extra_end("animals")

5行目の("animals")という引数は、1行目の(str)に置き換えられます。 置き換えると考えやすいです。

def extra_end(animals) #←実際は(str)

2行目の

extra_end = str.slice(str.length - 2,2)

こちらもstranimalsに置き換えて考えてみます。

extra_end = animals.slice(animals.length - 2,2)
#animalsは実際はstrです

この

animals.slice

animalsという文字列をスライスしましょう。という事です。

(animals.length -2,2)

.lengthは文字の長さを調べるメソッドです。 animals.length -2で最後の文字から2番目という意味です。 animalsの最後の文字から2番目はlsです。

その次にある2の意味は先ほど書いた最後から2番目、すなわちanimalsの最後から2番目の、lsから2文字という事です。

少しわかりにくいので、数値を変えてみます。

extra_end = animals.slice(animals.length - 5,3)

-5,3に変えて考えていきます。

animals.length -5で最後の文字から5番目という事なのでimalsという事です。

そして、次に3ということはimalsの前から3文字目という意味です。 なので、

extra_end = animals.slice(animals.length - 5,3)

imaを表しています。

それでは先ほどの記述の続きに戻ります。

puts extra_end * 3

このextra_endにはlsが入っています。 *3は×3という意味なので出力結果は

lslsls

となります!