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