Rubyを1から学習する中で覚えていった事・使った事をメモしていきます。
随時追加記事
見出し
コメント
1行コメント
1 |
# 1行コメントはシャープ |
複数行コメント
1 2 3 4 |
=begin 複数行コメントは ビギンとエンドで囲む =end |
配列
Array#zip
1 2 3 |
arrayA = [1,2,3] arrayB = ["a","b","c"] arrayA[0,2].zip(arrayB[0,2]) |
配列に要素を追加する
1 2 3 4 |
arrayA = [1,2,3] arrayA.push(4) arrayA << 5 #=> [1,2,3,4,5] |
each
配列ループ
1 2 3 4 5 6 7 |
array = [1, 2, 3] array.each{|i| p i } # => 1 # => 2 # => 3 |
連想配列(ハッシュ)ループ
1 2 3 4 5 6 7 8 9 10 11 |
array = {'windows' => 1, 'mac' => 2, 'linux' => 3} array.each{|key, value| p key p value } # => "windows" # => 1 # => "mac" # => 2 # => "linux" # => 3 |
飛ばす(PHPで言うcontinue)
next
1 2 3 4 5 |
arrayA.each do |a| if a == "hoge" next end end |
map
インデックスループ
1 2 |
(0...dates.length).map{|i} dates[i]} # => [["1993", "2", "24"], ["2014", "1", "1"]] |
文字列操作
結合
1 2 3 |
r = "test" p r + "-ok" # => "test-ok" p r # => "test" |
破壊的結合
1 2 3 |
r = "test" p r << "-ok" # => "test-ok" p r # => "test-ok" |
部分文字列
1 2 3 4 |
r = "test" p r[1] # => "e" p r[0,2] # => "te" p r[1..2] # => "es" |
文字列長
1 2 |
r = "test" p r.length # => 4 |
フォーマット
1 2 3 4 5 |
format("文字は %s 数字は %d", "abc", 123) # => "文字は abc 数字は 123" format("%05d", 3) # => 00003 |
文字列カウント
1 2 |
"test".count("t") # => 1 |
先頭・末尾の空白除去
1 2 3 |
s = " test " s.strip # => "test" |
部分文字列 n文字目からm文字抽出したい
1 |
hoge_txt[3, 5] # 3文字目から5文字抽出 |
行分割
1 2 3 4 5 6 7 8 9 10 11 12 13 |
s = "te\nst" s.lines.to_a # to_array # => ["te\n", "st"] s.lines.map(&:chomp) # => ["te", "st"] s.split("\n") # => ["te", "st"] a = []; s.each_line{|l| a << l}; a # => ["te\n", "st"] |
文字分割(スペース区切り)
1 2 3 |
s = " t e s t " s.split # => ["t", "e", "s", "t"] |
文字分割(指定文字 ex.カンマ区切り)
1 2 3 |
s = " t,e,s,t " s.split(',') # => ["t", "e", "s", "t"] |
文字分割(1文字ずつ)
1 2 |
"test".chars.to_a # => ["t", "e", "s", "t"] |
配列をカンマ区切りで文字結合
1 2 |
arrayA = ['a', 'b', 'c'] p arrayA.join(',') $ => 'a, b, c' |
HTMLエスケープ
1 2 3 |
require 'cgi' CGI.unescapeHTML "<br>" # => "<br>" |
windowsでpした時の文字化け
1 |
p あああ #=> "\u3042\u3042\u3042" |
となってしまうので
1 |
puts "あああ".encode(Encoding::Windows_31J) #=> あああ |
とする
指定文字列を削除
1 2 |
s = "あいうえお" s.delete("う") #=> あいえお |
指定文字を含む
1 2 |
s = "abc" s.include?("b") #=> true |
改行操作
改行削除
1 2 |
"test\n".chomp # => "test |
ファイル
開く
1 |
html = open("test.html", &:read) |
日時
1 2 3 4 5 6 7 8 |
Time.local(2016) # => 2016-01-01 00:00:00 +0000 Time.local "2016" # => 2016-01-01 00:00:00 +0000 Time.local 2016 # => 2016-01-01 00:00:00 +0000 Time.local 2016, 11, 27 # => 2016-11-27 00:00:00 +0000 |
実行
1 |
$ ruby test.rb |
irb(Interactive Ruby)
rubyの実行も出来る
1 |
$ irb test.rb |
対話形式でも出来る
1 2 3 |
$ irb irb(main):001:0> 1+2 => 3 |
クラス
1 2 3 4 5 |
class Test def test_method puts "test" end end |
ruby参考プログラムなどで出て来るklassについて
classが予約語だから
http://shirusu-ni-tarazu.hatenablog.jp/entry/2014/05/08/001504
オブジェクト
オブジェクトから文字列に変換する
1 |
test_str = test_obj.to_s |
オブジェクトをひたすら正規表現でどうにかしようとしていました。これをやって文字列にしないと正規表現でマッチ(str型のmatchメソッド)させたり出来なかった。
メソッド
initialize
クラスをnewした時に実行される。コンストラクタと同じような感じ。
型変換
数値にする
1 |
hoge_txt.to_i |
文字列にする
1 |
hoge_txt.to_s |