LoginSignup
9
3

More than 5 years have passed since last update.

Ruby初心者でも使える便利メソッド&小ネタ集

Posted at

この記事は、MKAK Advent Calendar 2016の2日目の記事です。

はじめに

痒いところに手が届くRuby。
自前で頑張って実装していた機能も、調べてみたら既に存在していた、なんてこともあるかと思います。
そこで、今回は自分が見つけたRubyの便利メソッドや、小ネタを紹介したいと思います。
また、今回使用したRubyのバージョンは2.2.2です

配列のシャッフル

カードゲームなどを作るときに欠かせないのが配列のシャッフルだと思います。
C言語などで実装しようとするとそれなりに長い道のりを歩むことになりますが、Rubyのshuffleメソッドを使えば簡単にできます。

[1, 2, 3, 4, 5].shuffle #=> [3, 1, 2, 5, 4]

配列から中身をランダムに抽出

先程紹介したshuffleメソッドと、配列の先頭を参照するfirstメソッドを組み合わせれば、配列から中身をランダムに抽出することができます。

[1, 2, 3, 4, 5].shuffle.first #=> 3

と言う説明に納得した方は、まだまだ怠惰具合が足りません。
Rubyにはsampleというメソッドが用意されています。

[1, 2, 3, 4, 5].sample #=> 3

複雑なCSVを分割

'hoge,foo,bar'.split(',') #=> ["hoge", "foo", "bar"]

上記のようなプログラムを書くことがあると思いますが、これが通用するのは単純なCSVの場合のみです。
以下のような場合には、面倒臭がらずにCSV.parseを使ったほうがいいです。

'hoge,"foo,piyo,fuga",bar'.split(',') #=> ["hoge", "\"foo", "piyo", "fuga\"", "bar"]

require 'csv'
CSV.parse('hoge,"foo,piyo,fuga",bar') #=> [["hoge", "foo,piyo,fuga", "bar"]]

文字列の出現数のカウント

"hoge foo bar hoge fuga"という文字列から、hogeという文字列の出現数をカウントしたいと思います。
自分がまず頭に浮かべたのは以下のようなプログラムでしたが、これでは上手く行きませんでした。

"hoge foo bar hoge fuga".count('hoge') #=> 11

これは、hogeの出現数をカウントしているので、意図した動作ではありません。
scanメソッドとcountメソッドを組み合わせることで、期待通りの動作となります。

"hoge foo bar hoge fuga".scan('hoge') #=> ["hoge", "hoge"]
"hoge foo bar hoge fuga".scan('hoge').count #=> 2

おわりに

今回はRubyの便利メソッドや小ネタ集の紹介を行いました。
対象がRuby初心者だったり、少しニッチな使用方法の紹介だったので、少し物足りない方もいらっしゃるかもしれません。
Rubyは短く書けて、書いてて楽しい言語なので、みなさんも是非どうぞ!

9
3
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
9
3