スライドショー

【Ruby入門】sliceの使い方まとめ【文字列 配列 正規表現】

こんにちは! フリーエンジニアの長瀬です。

みなさんはsliceを使っていますか?

sliceを使えば配列、文字列、そしてハッシュから直感的に情報を取り出すことができます。

また,文字列の場合は正規表現との相性もいいので、正規表現についても学ぶ必要があります。

それでは行ってみましょう。

この記事では、rubyのsliceについて

・ 配列の番号(インデックス)を指定する
・ 配列の最後の要素から配列の番号(インデックス)を指定する
・ 配列の番号(インデックス)の範囲を指定する
・ 文字に振られた番号(インデックス)を指定する
・ 文字を範囲で取り出す

という基本的な内容から、

・ 文字を正規表現を使って取り出す
・ matchで部分的に文字列を取り出す
・ハッシュでslice

といった応用的な内容についても解説していきます。

配列でslice

配列の番号(インデックス)を指定する

まずは配列でsliceを使う方法について説明します。

要素の取り出しにはsliceと、そのエイリアス(名前は違うけど機能は同じ)の[]が使えます。

いくつ使用例を紹介します。

array = ["Ruby","Python","Java"]
p array[0]
p array.slice(0)

[実行結果]

"Ruby"
"Ruby"

このように、要素に配列のインデックス番号を指定することで配列の要素を取り出すことができます。

また、[]でもsliceでも同じ結果が返っていきていることがわかります。

配列の要素は0から始まりますので、"Ruby"が取り出されます。

配列の最後の要素から配列の番号(インデックス)を指定する

逆にマイナスを使って、配列の最後の要素から取り出すこともできます。

array = ["Ruby","Python","Java"]
p array[-1]
p array.slice(-1)

[実行結果]

"Java"
"Java"

-1は最後の要素を表すので、"Java"が取り出されています。

配列の番号(インデックス)の範囲を指定する

次は範囲を指定して取り出す方法です。

array = ["Ruby","Python","Java"]
p array[0,2]
p array.slice(0,2)
p array[0..3]
p array.slice(0..3)

[実行結果]

["Ruby","Python"]
["Ruby","Python"]
["Ruby","Python","Java"]
["Ruby","Python","Java"]

また、このように範囲を指定して配列の要素を取り出すこともできます。

..はRangeオブジェクトと呼ばれるもので、rubyにおいて範囲を表現します。

Rangeオブジェクトについてはこちらを参考にしてください。

文字列でslice

文字に振られた番号(インデックス)を指定する

shutterstock_156897374

文字列でもsliceや[]を使って、一つ一つの文字を取り出すことができます。
配列の場合は、配列の要素でしたが、文字列の場合は一文字一文字に番号が振られます。

p "ruby".slice(0) 
p "ruby"[0]

[実行結果]

"r"
"r"

文字を範囲で取り出す

また、配列同様に、Rangeオブジェクトによる範囲指定もできます。

p "ruby".slice(0,3) 
p "ruby".slice(0..3)
p "ruby"[0,3]
p "ruby"[0..3]

[実行結果]

"rub"
"ruby"
"rub"
"ruby"

文字を正規表現を使って取り出す

sliceの引数には正規表現や文字列を渡すこともできます。

p "ruby".slice(/^r.*/) 
p "python".slice(/\^r.*/)
p "ruby".slice("by") 

[実行結果]

"ruby"
nil
"by"

正規表現や文字列を渡すと、それにマッチした値が抽出されます。

該当する文字列がなかった場合はnilが返ってきます。

正規表現に関しては、しっかりと理解していないと扱えないので、こちらの記事を参考に自分でコードを打ち込んでみてくたさい。(正規表現は特殊記号のオンパレードなので、実際に書いてみることをおすすめします。)


忘れたら読みたいRuby正規表現の文法早見表
更新日 : 2019年4月2日

【Rubyの正規表現!】基礎の基礎から応用まで徹底解説!
更新日 : 2019年6月12日

【Ruby入門】文字列の置換方法まとめ(gsub sub regex)
更新日 : 2019年7月31日

matchで部分的に文字列を取り出す

matchメソッドを使えばマッチングさせた文字をもう一度使って、文字列を作成できます。

実際にサンプルコードをみるのが一番わかりやすいです。

matched_string = "rubypythonjava".match(/ruby(p.+)java/)
p matched_string[0]
p matched_string[1]

[実行結果]

"rubypythonjava"
"python"

このように(p.+)で囲まれた部分がmatched_stringの要素になります。

また、一番始めの要素は常に元の文字列になっています。

これは大事なことですが、()での部分的指定は複数使用可能です。

matched_string = "samurai_value = 1024".match(/(s.*)\s=\s(\d{0,12})/)
p matched_string[0]
p matched_string[1]
p matched_string[2]

[実行結果]

"samurai_value = 1024"
"samurai_value"
"1024"

このように、部分的に文字列を取得してその後、取得した文字列を組み合わせて新しい文字列を作成する場合などにmatchメソッドを使うことができます。

ハッシュでslice

ハッシュでも、ActiveSupportという外部ライブラリーを使うと、sliceメソッドが使えるように拡張できます。

キーをシンボルで指定するだけで、自分が取り出したい部分だけを簡単に選び出すことができます。

require 'active_support'
hash = {"Ruby":"Rails","Python":"Django","PHP":"CakePHP"}
p hash.slice(:Ruby,:Python)
p hash.slice(:Ruby,:PHP)

[実行結果]

{:Ruby=>"Rails", :Python=>"Django"}
{:Ruby=>"Rails", :PHP=>"CakePHP"}

ちゃんと指定した要素だけ取り出せますね。

また、逆に特定のハッシュの要素を削除したい場合は以下のようにexceptメソッドを使います。

require 'active_support'
hash = {"Ruby":"Rails","Python":"Django","PHP":"CakePHP"}
p hash.except(:Ruby,)

[実行結果]

{:Python=>"Django", :PHP=>"CakePHP"}

ちゃんと指定した:Rubyに該当する要素以外が取り出されていますね。

まとめ

いかがでしたでしょうか?

この記事では、rubyのsliceを解説しました。

sliceではとても柔軟に要素を指定できることを学びましたね。

配列、文字列、ハッシュでsliceメソッドを使うことができるので、今回勉強した内容が使える場面に遭遇した時は自信を持って使いましょう。

また、文字列では正規表現と組み合わせることで自由に文字を取り出すことができましたね。

rubyの文字列にはsliceの他にも便利なメソッドがたくさんあるので、これを機に勉強してみてはいかかでしょうか。

もしsliceについて忘れてしまったらこの記事を確認してくださいね!

Rubyの文字列をしっかり理解したい方に

この記事は文字列を体系的に解説した3ステップで簡単! Rubyの文字列を 完全理解の一部となります。
文字列をさらに理解したい方はこちらを読んでどんどん理解を深めていくようにしましょう。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説