なお、第2章「配列とハッシュ」についても完了した。
emacsにも慣れてきた。
本当にキーボードから手が離れない。
これにはビックリ
Rubyは、慣れると、ものすごく武器になりそうな気がしてきた。
気合を入れて勉強しようっと
以下、まとめ。
[まとめ]
・配列(Array)とハッシュ(Hash)はRubyプログラムにおける代表的なコンテナオブジェクトです。
・配列は要素を並べたものです。添字番号は0から始まります。
・要素を並べて角括弧で括ったのが配列リテラルです。それらの要素を含む配列を構築します。
・配列に負の添字を渡すと最後の要素から逆順に辿った位置を表します。
・長さ付きの添字、範囲添字があります。
・いくつかのメソッドには破壊的、非破壊的なバージョンがあります。
・ハッシュの要素とは、各々キーとなるオブジェクトから値となるオブジェクトへの対応関係です。
・要素を並べて波括弧で括ったのがハッシュリテラルです。それらの要素を含むハッシュを構築します。
・イテレータを使うとコンテナの要素を安全に簡単に辿ることができます。
・Enumrableモジュールはeachメソッドから多数のメソッドを導出します。配列やハッシュはEnumrable
モジュールからそれらのメソッドを継承しています。
・Enumrable::Enumratorオブジェクトはeachメソッド以外からEnumrableのメソッド群を導出したプロクシです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
a[0..2] = 1, 2
array = ["a", "b", "c"]
p array.length
p array.size
p array *= 2
p array.include? "c"
p array.sort
p array
p array.uniq
array.uniq!
p array
array = ["a", "b", "c"]
array.each do |item|
print item + " "
end
array = ["a", "b", "c"]
array.each_with_index do |item, index|
p [item, index]
end
acids = ["Adenin", "Thymine", "Guanine", "Cytosine"]
signs = acids.map{|acid| acid[0, 1] }
p signs
# 単純なmap
acids = acids.map{ |a| a.downcase}
p acids
# 省略バージョン
acids = ["Adenin", "Thymine", "Guanine", "Cytosine"]
acids = acids.map(&:downcase)
p acids
array = ["73", "2", "5", "1999", "53"]
# デフォルトの文字列ソート(辞書式)
p array.sort
# 数値に変換してから比較してソート
p array.sort{ |x, y| x.to_i <=> y.to_i}
month_to_ordinal = {
"Jan" => 1, "Feb" => 2, "Mar" => 3,
}
p month_to_ordinal["Feb"]
prefix = "yapoo-"
abbreviation = {
"CAT" => "Condensed-Abridged Tiger",
"Yapomb" => prefix + "womb",
"pilk" => prefix + "milk"
}
book_to_author = {
"Ruby" => "Flan",
"Prog" => "Thomas",
"AWDwR" => "Thomas"
}
p book_to_author["Prog"]
# 存在しないキーの場合
p book_to_author["Programing"]
# 既存キーの更新
book_to_author["Ruby"] = ["Flan", "Matz"]
p book_to_author["Ruby"]
# 新しいキーの登録
book_to_author["The Ruby Way"] = "Fulton"
p book_to_author["The Ruby Way"]
# p41-1
book_to_author.each do |book, author|
puts "#{book} by #{author}"
end
# p41-2
p book_to_author.map{ |book, author|
"#{book} by #{author}"
}
# p42-1
require 'enumrator'
book_to_author.enum_for(:each_with_index).map{ |(book, author), index|
"#{index+1}, #{book}"
}
hash1 = { "a" => 1, "b" => 2 }
hash2 = { "a" => 1, "b" => 2 }
p hash1 == hash2
# 順序は関係なし
p hash1 == { "b" => 2, "a" => 1 }
# 値が違う
p hash1 == { "a" => 9, "b" => 2 }
# キーが違う
p hash1 == { "z" => 1, "b" => 2 }
# 余分な要素
p hash1 == { "a" => 1, "b" => 2, "c" => 3 }

emacsにも慣れてきた。

本当にキーボードから手が離れない。

これにはビックリ

Rubyは、慣れると、ものすごく武器になりそうな気がしてきた。
気合を入れて勉強しようっと

以下、まとめ。
[まとめ]
・配列(Array)とハッシュ(Hash)はRubyプログラムにおける代表的なコンテナオブジェクトです。
・配列は要素を並べたものです。添字番号は0から始まります。
・要素を並べて角括弧で括ったのが配列リテラルです。それらの要素を含む配列を構築します。
・配列に負の添字を渡すと最後の要素から逆順に辿った位置を表します。
・長さ付きの添字、範囲添字があります。
・いくつかのメソッドには破壊的、非破壊的なバージョンがあります。
・ハッシュの要素とは、各々キーとなるオブジェクトから値となるオブジェクトへの対応関係です。
・要素を並べて波括弧で括ったのがハッシュリテラルです。それらの要素を含むハッシュを構築します。
・イテレータを使うとコンテナの要素を安全に簡単に辿ることができます。
・Enumrableモジュールはeachメソッドから多数のメソッドを導出します。配列やハッシュはEnumrable
モジュールからそれらのメソッドを継承しています。
・Enumrable::Enumratorオブジェクトはeachメソッド以外からEnumrableのメソッド群を導出したプロクシです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
a[0..2] = 1, 2
array = ["a", "b", "c"]
p array.length
p array.size
p array *= 2
p array.include? "c"
p array.sort
p array
p array.uniq
array.uniq!
p array
array = ["a", "b", "c"]
array.each do |item|
print item + " "
end
array = ["a", "b", "c"]
array.each_with_index do |item, index|
p [item, index]
end
acids = ["Adenin", "Thymine", "Guanine", "Cytosine"]
signs = acids.map{|acid| acid[0, 1] }
p signs
# 単純なmap
acids = acids.map{ |a| a.downcase}
p acids
# 省略バージョン
acids = ["Adenin", "Thymine", "Guanine", "Cytosine"]
acids = acids.map(&:downcase)
p acids
array = ["73", "2", "5", "1999", "53"]
# デフォルトの文字列ソート(辞書式)
p array.sort
# 数値に変換してから比較してソート
p array.sort{ |x, y| x.to_i <=> y.to_i}
month_to_ordinal = {
"Jan" => 1, "Feb" => 2, "Mar" => 3,
}
p month_to_ordinal["Feb"]
prefix = "yapoo-"
abbreviation = {
"CAT" => "Condensed-Abridged Tiger",
"Yapomb" => prefix + "womb",
"pilk" => prefix + "milk"
}
book_to_author = {
"Ruby" => "Flan",
"Prog" => "Thomas",
"AWDwR" => "Thomas"
}
p book_to_author["Prog"]
# 存在しないキーの場合
p book_to_author["Programing"]
# 既存キーの更新
book_to_author["Ruby"] = ["Flan", "Matz"]
p book_to_author["Ruby"]
# 新しいキーの登録
book_to_author["The Ruby Way"] = "Fulton"
p book_to_author["The Ruby Way"]
# p41-1
book_to_author.each do |book, author|
puts "#{book} by #{author}"
end
# p41-2
p book_to_author.map{ |book, author|
"#{book} by #{author}"
}
# p42-1
require 'enumrator'
book_to_author.enum_for(:each_with_index).map{ |(book, author), index|
"#{index+1}, #{book}"
}
hash1 = { "a" => 1, "b" => 2 }
hash2 = { "a" => 1, "b" => 2 }
p hash1 == hash2
# 順序は関係なし
p hash1 == { "b" => 2, "a" => 1 }
# 値が違う
p hash1 == { "a" => 9, "b" => 2 }
# キーが違う
p hash1 == { "z" => 1, "b" => 2 }
# 余分な要素
p hash1 == { "a" => 1, "b" => 2, "c" => 3 }