この記事は、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
これは、h
とo
とg
とe
の出現数をカウントしているので、意図した動作ではありません。
scan
メソッドとcount
メソッドを組み合わせることで、期待通りの動作となります。
"hoge foo bar hoge fuga".scan('hoge') #=> ["hoge", "hoge"]
"hoge foo bar hoge fuga".scan('hoge').count #=> 2
おわりに
今回はRubyの便利メソッドや小ネタ集の紹介を行いました。
対象がRuby初心者だったり、少しニッチな使用方法の紹介だったので、少し物足りない方もいらっしゃるかもしれません。
Rubyは短く書けて、書いてて楽しい言語なので、みなさんも是非どうぞ!