Miscanthus sinensis:Poaceae
Imperata cylindrica:Poaceae
Spiranthes sinensis:Orchidaceae
Arnica unalascensis:Compositae
Lactuca indica:Compositae
ここで登場するのがハッシュです。ハッシュでは、配列のインデックスに当たるものをキーといい、要素にあたるのもを値といいます。
ハッシュを作るのにもいくつか方法があります。
#ハッシュを作る方法その1 species_hash = Hash.new #species_hashというハッシュを作る species_hash["Miscanthus sinensis"] = "Poaceae" #Miscanthus sinensisをキーに、Poaceaeを値にする species_hash["Imperata cylindrica"] = "Poaceae" #以下同様です species_hash["Spiranthes sinensis"] = "Orchidaceae" species_hash["Arnica unalascensis"] = "Compositae" species_hash["Lactuca indica"] = "Compositae" p species_hash #p は puts に似ているが、ハッシュなどの中身を出力する species_hash.clear #ハッシュをの中身を空っぽにする p species_hash #ハッシュを作る方法その2 species_hash = { "Miscanthus sinensis" => "Poaceae", "Imperata cylindrica" => "Poaceae", "Spiranthes sinensis" => "Orchidaceae", "Arnica unalascensis" => "Compositae", "Lactuca indica" => "Compositae" } p species_hash
上のプログラムを実行すると次のようになるはずです。
{"Imperata cylindrica"=>"Poaceae", #本当はここでは改行されません "Arnica unalascensis"=>"Compositae", #ページが横に長くなってしまうので "Spiranthes sinensis"=>"Orchidaceae", #わざと改行しています "Lactuca indica"=>"Compositae", "Miscanthus sinensis"=>"Poaceae"} {} {"Imperata cylindrica"=>"Poaceae", "Arnica unalascensis"=>"Compositae", "Spiranthes sinensis"=>"Orchidaceae", "Lactuca indica"=>"Compositae", "Miscanthus sinensis"=>"Poaceae"}
ハッシュを作るには、まず配列と同じように Hash.new というように new というメソッドを作って、その後に代入していく方法があります。
ハッシュの名前[キー] = 値 という書き方です。
2つ目は { キー => 値 } というように、 { } で囲んで作る方法です。複数のキーと要素の組合せを使いたい場合には、「,」で区切りをつけて書いてきます。
一度 clear というメソッドでハッシュの中身は空っぽになっています。2つ目の方法で作っても、はじめのところで代入された内容と同じものが入っていることがわかります。
ところで、ハッシュは配列と違い、キーに順番と言うのはありません。実際出力されたのも、プログラムの順番とは違っています。
ところで、2つ目の方法では注意しなければならないことがあります。
species_hash = { "Miscanthus sinensis" => "Poaceae" } species_hash = { "Imperata cylindrica" => "Poaceae" } species_hash = { "Spiranthes sinensis" => "Orchidaceae" } species_hash = { "Arnica unalascensis" => "Compositae" } species_hash = { "Lactuca indica" => "Compositae" } p species_hash
{"Lactuca indica"=>"Compositae"}
p species_hash["Miscanthus sinensis"] #Miscanthus sinensisというキーの値を取出す p species_hash["Imperata cylindrica"] p species_hash["Lactuca indica"]
"Poaceae" "Poaceae" "Compositae"
キーの一覧を取出したり、値の一覧を取出すには、keys や values というメソッドを使います。
p species_hash.keys #キーの一覧を取出す(順番はバラバラ) p species_hash.values #値の一覧を取出す(順番はバラバラ)
["Imperata cylindrica", "Arnica unalascensis", "Spiranthes sinensis", #ここも本当は改行されません "Lactuca indica", "Miscanthus sinensis"] ["Poaceae", "Compositae", "Orchidaceae", "Compositae", "Poaceae"]
キーや値、あるいはキーと値の組み合わせを次々と取出すには、each_key や values 、あるいは each というメソッドを使います。これらの使い方は、配列のところで出てきた each とほとんど同じです。詳しくは下の例を見てください。
species_hash.each_key{ |key| #species_hashのキーをそれぞれ key という変数にに代入 p key } print "\n" #区切りのための改行 species_hash.each_value{ |value| #species_hashの値をそれぞれ value という変数にに代入 p value } print "\n" species_hash.each_value{ |key,value| #species_hashのキーと値をそれぞれ key と value という変数にに代入 p key,"\t",value,"\n" #\tはタブ文字 }
"Imperata cylindrica" "Arnica unalascensis" "Spiranthes sinensis" "Lactuca indica" "Miscanthus sinensis" "Poaceae" "Compositae" "Orchidaceae" "Compositae" "Poaceae" Imperata cylindrica Poaceae Arnica unalascensis Compositae Spiranthes sinensis Orchidaceae Lactuca indica Compositae Miscanthus sinensis Poaceae
だんだんと技が増えてきました。次のページではファイルからデータを読み込む方法を説明します。基本中の基本の説明は次のページで終わりです。
そのあとは、いよいよ実践的な内容になります。