やったもん勝ち

主にプログラミングのこと。生産性向上の某とかも。

rubyの配列、ハッシュ、シンボルあたりを整理する備忘録

ハッシュ、シンボル、配列あたりがごちゃごちゃしているので、まとめる。
備忘録です。

配列

シンプルな配列

array = [1,2,3,4,5]
[1, 2, 3, 4, 5]

要素を追加したり、色々なメソッドを使えます。

array.push(10)
[1, 2, 3, 4, 5, 10]

色んなものが配列の要素になれます。
違う種類のものが入っていてもOKです。

array = [1, "a", [1,2], [3, "b"], {name:"bob", age:18}]
[1, "a", [1, 2], [3, "b"], {:name=>"bob", :age=>18}]

要素を取り出してみます

array[2]
[1, 2]

さらに取り出してみます

array[2][1]
2

ハッシュもこの調子でできそうです。

array[4][:name]
"bob"

ハッシュ

hash = { orange: 100, apple: 200, banana:500 }
{:orange=>100, :apple=>200, :banana=>500}
hash = { a1: 100, b: 200, f:500 }
{:a1=>100, :b=>200, :f=>500}

ハッシュの値にハッシュも配列も入れられる

hash = { a: {aa: 110, ab:120, ac:[130, 140, 150, 160] }, b: 200, f:500 }
{:a=>{:aa=>110, :ab=>120, :ac=>[130, 140, 150, 160]}, :b=>200, :f=>500}

取り出すときは配列と同様に順番に指定していく

hash[:a][:ac][2]
150

ちなみにキーにハッシュや配列も入れることができるっぽい。
使う場面は想像できないが

hash = { {a: 120} => 20, [1,2,3] => 30 }
{{:a=>120}=>20, [1, 2, 3]=>30}
hash[[1,2,3]]
30
hash[{:a=>120}]
20

ハッシュのシンボルについて

keyとして使えるものに、シンボルというものがある。

シンボルは:keyのように使う

Fighter = { :Hanma => "Baki", :Hanayama => "Kaoru", :Orochi => "Doppo" }
# 次のように宣言しても全く同じ
# Fighter = { Hanma:"Baki", Hanayana: "Kaoru", Orochi: "Doppo" }
{:Hanma=>"Baki", :Hanayama=>"Kaoru", :Orochi=>"Doppo"}

取り出すときは、次のようにして使う

Fighter[:Hanma]
"Baki"

keyは文字列も指定できる。
文字列とシンボルが混在していても、問題なく処理される。
文字列とシンボルは別のものとして扱われるので、注意が必要。

# 同じkeyだと上書きされてしまう
Underground_Fighter = { :Hanma => "Baki", :Hanayama => "Kaoru", :Orochi => "Doppo" , Hanma: "Jack" }
<main>:1: warning: key :Hanma is duplicated and overwritten on line 1





{:Hanma=>"Jack", :Hanayama=>"Kaoru", :Orochi=>"Doppo"}
Underground_Fighter[:Hanma]
"Jack"
# keyを:Hanmaと"Hanma"でハッシュに入れる
Chika_Fighter = { :Hanma => "Baki", :Hanayama => "Kaoru", :Orochi => "Doppo" , "Hanma" => "Yujiro" }
{:Hanma=>"Baki", :Hanayama=>"Kaoru", :Orochi=>"Doppo", "Hanma"=>"Yujiro"}
Chika_Fighter["Hanma"]
"Yujiro"
Chika_Fighter[:Hanma]
"Baki"