Ruby 入門 -4ページ目

Ruby 入門

~ Ruby初心者による逆引き備忘録 ~

<< 目次

絶対パスを取得する。

expand_test.rb という名前で以下を書いて実行する。
__FILE__ は、実行ファイル名が格納された予約変数。

p File.expand_path(__FILE__)

実行結果

"/Users/ruby/expand_test.rb"


<< 目次
<< 目次

test.txt というファイルに str の変数の内容を書き込む。

file = "test.txt"
str = "file write."
mode = "w"
open( file , mode ){|f| f.write(str)}

file = "test.txt"
str = "new file"
mode = "w"
open( file , mode ){|f| f.write(str)}

file = "test.txt"
str = " " + "add str"
mode = "a"
open( file , mode ){|f| f.write(str)}



実行後 test.txt を開いてみる。

new file add str


上記の例で3回書き込みを行っている為、このような結果になる。

1,2回目は、モードが "w" で新規に上書きをしている為、
1回目に書いた内容が2回目に上書きされてしまう。

3回目は、モードが "a" で追加で書き込みをしている為、2回目の内容に追加で書き込む。

<< 目次
<< 目次

正規表現で配列要素を判定する。

array = [ "aaa", "BBB", "ccC", "123", "456", "###"]

array.each{|a|
if /[0-9]/ =~ a
puts "numeric => #{a}"
elsif /^[a-z]+$/ =~ a
puts "alphabet(lower) => #{a}"
elsif /^[A-Z]+$/ =~ a
puts "alphabet(upper) => #{a}"
elsif /^[a-zA-Z]+$/ =~ a
puts "alphabet(upper + lower) => #{a}"
else
puts "not much. => #{a}"
end
}


実行結果

alphabet(lower) => aaa
alphabet(upper) => BBB
alphabet(upper + lower) => ccC
numeric => 123
numeric => 456
not much. => ###


<< 目次
<< 目次

ハッシュを結合というかマージする。

hash1 = { 1 => "aaa", 2 => "bbb", 3 => "ccc" }
hash2 = { 4 => "ddd", 5 => "eee" }

p hash1
p hash2

p hash1.merge(hash2)


実行結果

{1=>"aaa", 2=>"bbb", 3=>"ccc"}
{5=>"eee", 4=>"ddd"}
{5=>"eee", 1=>"aaa", 2=>"bbb", 3=>"ccc", 4=>"ddd"}


<< 目次
<< 目次

ハッシュを key でソートする。

hash = { "a" => "111",
"b" => "11",
"c" => "2222",
"d" => "33",
}
p hash

hash.sort{|a, b| a[0] <=> b[0] }.each{|key, value|
puts "#{key} #{value}"
}

実行結果

{"a"=>"111", "b"=>"11", "c"=>"2222", "d"=>"33"}
a 111
b 11
c 2222
d 33



ハッシュを value でソートする。
value でソートする為には、a[0] <=> b[0] を a[1] <=> b[1] にすればOK。


hash = { "a" => "111",
"b" => "11",
"c" => "2222",
"d" => "33",
}
p hash

hash.sort{|a, b| a[1] <=> b[1] }.each{|key, value|
puts "#{key} #{value}"
}


実行結果

{"a"=>"111", "b"=>"11", "c"=>"2222", "d"=>"33"}
b 11
a 111
c 2222
d 33


文字列的には、これでOK。

数字としてソートするには、以下のようにする。

hash = { "a" => "111",
"b" => "11",
"c" => "2222",
"d" => "33",
}
p hash

hash.sort{|a, b| a[1].to_i <=> b[1].to_i }.each{|key, value|
puts "#{key} #{value}"
}

実行結果

{"a"=>"111", "b"=>"11", "c"=>"2222", "d"=>"33"}
b 11
d 33
a 111
c 2222


<< 目次
<< 目次

ハッシュを空にする。

hash = { 1 => "aaa", 2 => "bbb", 3 => "ccc" }
p hash

hash.clear
p hash

hash = { 1 => "aaa", 2 => "bbb", 3 => "ccc" }
p hash

hash = {}
p hash


実行結果

{1=>"aaa", 2=>"bbb", 3=>"ccc"}
{}
{1=>"aaa", 2=>"bbb", 3=>"ccc"}
{}


<< 目次
<< 目次


hash = { 1 => "aaa", 2 => "bbb", 3 => "ccc" }
p hash

hash.delete("3")
p hash

hash.delete(3)
p hash

hash.delete("bbb")
p hash

hash.delete(2)
p hash


実行結果

{1=>"aaa", 2=>"bbb", 3=>"ccc"}
{1=>"aaa", 2=>"bbb", 3=>"ccc"}
{1=>"aaa", 2=>"bbb"}
{1=>"aaa", 2=>"bbb"}
{1=>"aaa"}


delete は、key 一致で削除しているらしい。

<< 目次
<< 目次

ハッシュに要素を追加する。

hash = { 1 => "aaa", 2 => "bbb", 3 => "ccc" }
p hash

hash.store(4,"ddd")
p hash

hash[5] = "eee"
p hash


実行結果

{1=>"aaa", 2=>"bbb", 3=>"ccc"}
{1=>"aaa", 2=>"bbb", 3=>"ccc", 4=>"ddd"}
{5=>"eee", 1=>"aaa", 2=>"bbb", 3=>"ccc", 4=>"ddd"}


<< 目次
<< 目次

配列をハッシュに変換する。

array = [ "1", "aaa", "2", "bbb", "3", "ccc"]
p array

hash = Hash[*array]
p hash

実行結果

["1", "aaa", "2", "bbb", "3", "ccc"]
{"1"=>"aaa", "2"=>"bbb", "3"=>"ccc"}


<< 目次