この章では今まで説明した事以外のハッシュの知識について説明します。
初めに今までとは違ったキーと値の設定方法について説明します。
今までは以下のように記述すればハッシュの要素を追加できました。 この他にもという構文でキーと値を追加することが出来ます
では例をみてみましょう。 このように書くことでハッシュにという新たな要素が加わります。
上書きしたい場合は以下の通り、キーに対する値に他の値を設定します。 結果は以下の通りです。 次はハッシュの要素が何個あるかを確認する方法について説明します。
では例をみてみましょう。 この構文でハッシュの要素数を取得できます。
結果は以下の通りです。
次はハッシュの要素をすべて出力する方法について説明します。
では例をみてみましょう。 ハッシュの要素をブロック内のにそれぞれセットして、出力します。
例えば例の中のaにはキーが入り、bには値が入ります。
この構文で書けばすべてのハッシュの要素を出力することが出来ます。
結果は以下の通りです。 キーと値の両方を出力したい時は前の例の構文でもいいですが、キーだけ、もしくは値だけを出力したい場合について次の例で説明します。
では例をみてみましょう。 キーだけを出力したい時にはを使い、値だけを出力したい時にはを使います。
結果は以下の通りです。
次はハッシュの全てのキーを配列に変える方法について説明します。
では例をみてみましょう。
この構文でキーだけを配列にすることが出来ます。
この例ではkがその配列になります。
結果は次の通りです。
次はハッシュの全ての値を配列に変える方法について説明します。
では例をみてみましょう。 この構文で値だけを配列にすることが出来ます。
この例ではkがその配列になります。
結果は以下の通りです。
次はキーと値を「配列の配列」に変える方法です。
では例をみてみましょう。 結果は以下の通りです。
この構文でキーと値を配列の配列にすることが出来ます。
配列の配列とはどのような形式であるのかを説明します。
文字通り、配列の配列は配列の中に配列を入れる形式です。
この例の配列の配列は以下のようになっています。 =>外側の[ ]の中にさらに配列が入っている形式になります。
では細かく分解してみます。
タグ: ハッシュ
ハッシュのその他の作成方法を知ろう
この章では様々なハッシュの作成方法について説明します。
ハッシュの書き方は以下の書き方以外にもありますので、次の例で説明します。 では例をみてみましょう。 基本構文は以下の通りですが、Hashのカッコの中に2種類の方法でキーと値を書くことができます。 結果は以下の通りです。 では次の例をみてみましょう。
要素の無いハッシュを作って後から値を入れることもできます。 「Hash.new」というカラのハッシュを作成してからのようにキーと値を指定してデータを入れていきます。
結果は以下の通りです。 では次の例をみてみましょう。
キーが存在しない時にデフォルト値を設定する例です。 のように存在しないキーで出力しようとした時にのようにデフォルト値を設定しておけばその値が出力されます。 結果は以下の通りです。 では次の例をみてみましょう。
次はキーを指定して、その値を出力させたくてもキーが存在しない場合に、の中で指定した値を出力させたい時には以下のような形式で記述します。 この構文で書くと例え指定したキーと値が無くても、そのキーと値が新たな要素としてハッシュに加わります。 のように存在しないキーを指定した場合はデフォルト値が出力されますが、この例の場合は20です。
例えキーが存在しなくてもハッシュに新しいキーと値として追加されているのがデバック用のpで出力すると分かります。
結果は以下の通りです。
ハッシュについて知ろう
この章ではハッシュについて説明します。
ハッシュとは配列と似ていますが、配列は複数のデータをまとめて入れることができますが、ハッシュも基本的な仕組みは同じで、複数のデータをまとめて入れることができます。
では配列とハッシュの違いは何か?
大きく違う点は配列は要素を「添え字」で管理していましたが、ハッシュは「キー」で要素を管理します。
配列の場合は以下のように添え字で要素を管理していました。 ハッシュの場合は次の例のように添え字の代わりに「文字列であるキー」を指定します。
ハッシュの場合は個々の要素をキーによって管理します。
では例をみてみましょう。 ハッシュの基本構文は以下の通りです。 キーとはの箇所で、値はの箇所です。
配列は前からと順番に数えていましたが、ハッシュには要素間の順番はなく、で関連付けして記述します。
つまり、はという関連付けで記述しています。
出力する時にはのようにという形式で書けばキーに対応する値が出力されます。
次の例では以外の方法でハッシュの要素を指定しています。
それはfetchを使う方法です。 では例をみてみましょう。 この例では紺野に対応する値が出力されるので、結果は34です。
もしくは以下のように変数に入れてから出力することも出来ます。 キーに対応する値をのように変数に結果を入れてから出力させても問題ありません。
結果は以下の通りです。 printを使ってのように存在しない要素を出力する場合は要素が存在していなくてもエラーにはなりませんが、fetch を使ってのように存在しないキーを指定して出力しようとするとと言うエラーが発生します。
結果は以下の通りエラーです。 もしキーが存在しない時にデフォルト値(決まっている値)を出力させたいのならばの20のようにデフォルト値を設定します。 では例をみてみましょう。 もしくは この2つの例はキーであるが無い場合でも20が出力されます。
では次に進みます。
次はの場合はデフォルト値しか出力されませんでしたが、存在しないキーとデフォルト値両方を出力させたい時は以下のように記述します。 変数名はrではなくても、自由に付けてください。
結果は以下の通りです。 以下のようにキーが存在する場合にはその値が出力されます。
また、の部分は行を変えて書くことができます。 結果は以下の通りです。 次はキーが存在しなかった場合、キーそのものを出力する方法について説明します。 のように存在していないキーを出力するとブロック内の変数kに渡されて、そのキーが出力されます。
のように存在するキーを指定した場合はその値が出力されます。
結果は以下の通りです。 次の例は先ほどの例の変形型でキーが存在しなかったら、そのキーとその値をハッシュの新たな要素として入れる形式です。
つまり次の例はと言う要素を新たにハッシュであるnameに加えています。基本構文は以下の通りです。 例をみてみましょう。 結果は以下の通りです。
ハッシュに関する関数を知ろう
この章ではハッシュの要素に対して、様々な操作をする関数について説明します。
以下が主な関数です。 では例をみてみましょう。 ではkeysについて説明します。 ハッシュに含まれるキーだけを取り出すにはkeysを使用します。
keysはハッシュに含まれるすべてのキーをリストにして返します。
返されるキーには順番はなく、ランダムにリストに格納されます。
上の例では2つの方法でキーを出力しています。
1つ目の方法はforeachです。
foreachは配列の要素を取り出すのに使いますが、ここではハッシュに含まれるすべてのキーのリストを取り出すのに使います。
2つ目の方法はキーのリストを@keyに入れて、printで出力しています。
では次の例をみてみましょう。 ハッシュに含まれる値だけを取り出すにはvaluesを使用します。valuesはハッシュに含まれるすべての値をリストにして返します。
返される値には順番はなくランダムにリストに格納されます。
先ほどの例では2つの方法で値を出力しています。
1つ目はforeachです。
foreachは配列の要素を取り出すのに使いますが、ここではハッシュにあるすべての値を取り出すのに使います。
2つ目は値のリストを@valueに入れて、printで出力しています。
次は配列の章でも説明したsort関数について説明しますが、詳しくは配列の章のsort関数の説明を参考にしてください。 では例をみてみましょう。 キーを文字列で比較する場合にはcmpを使用します。
キーを数値として比較したい場合にはを使用します。
次はハッシュの値をソートする方法について説明します。
では例をみてみましょう。
値を数値で比較するので、を使用します。
次はeach関数について説明します。 each関数はハッシュに含まれるキーと値のペアを取り出して、キーと値のペアを返します。
ハッシュの最初のキーと値を取り出しています。
ハッシュは要素間の順番がないので、初めのが出力されるわけではないので注意してください。
では例をみてみましょう。
次はexists関数について説明します。
ハッシュの中に指定したキーが存在するかを確認します。
存在する場合はTRUEを返し、存在していなければFALSEを返します。
キーだけを調べているので、次の例のように値にデータが入っていなくてもTRUEを返します。
結果は「定義されています」です。
すべてのハッシュのキーに対して、存在するのかチェックしたい場合にはforeach文と一緒にif文でチェックを行います。
次はdefined関数について説明します。
defined関数は値が定義されている場合はTRUEを、定義されていない場合はFALSEを返します。
値がカラであるならばFALSEになります。
では例をみてみましょう。
この例ではの値がカラです。
その場合にはFALSEを返します。
FALSEなのでが実行されます。
次はdelete関数について説明します。
delete関数は引数に指定したキーと値を削除します。
戻り値は削除が出来たのならばその削除した値になります。 このようにprintで %nameの要素を出力することが出来ますが、ハッシュをダブルクォートで囲まないでください。
次はハッシュを初期化する方法について説明します。
ハッシュの要素を初期化するには、上の例のように空のリストを代入します。
ハッシュにカラのリストを代入することにより、ハッシュの要素がすべて削除されます。
「%name=();」でハッシュの要素を初期化したので、上の例を出力しようとしても何も出力されません。
ハッシュについて知ろう
この章ではハッシュについて説明します。
ハッシュは配列と似ていますが、普通の変数では1つしかデータを入れることができませんが、配列は複数のデータをまとめて入れることができます。
ハッシュも基本的な仕組みは同じです。
では配列とハッシュの違いは何でしょうか?
大きく違う点は配列は個々の要素を添え字で管理していましたが、ハッシュは文字列であるキーで個々の要素を管理します。
ハッシュを作成する方法は2種類ありますので、以下で説明します。 基本構文1の例をみてみましょう(スペースの都合上ハッシュを2行で書いています)。 基本構文2の例をみてみましょう。 ではハッシュについて説明をします。
ハッシュは添え字の代わりにキーで要素を管理します。
キーとはの箇所のことを言います。
値とはの箇所のことを言います。
ハッシュはキーと値をペアで関連付けして記述します。
キーと値の関連付けはという記号で行います。
つまり、は紺野は34歳、水野は32歳、清水は13歳という意味で,キーと値はお互いに関連付けして記述します。
ハッシュの要素を取得する基本構文はです。
この例の場合にはと書くことで34が出力されます。 配列の場合にはリストの先頭から添え字がと決められていました。
ハッシュの場合にはリストの中の要素は文字列であるキーで管理されているので、要素間には順番はありません。
3
1つのハッシュの中で同じキーを重複して使ってはいけませんが、もし間違って重複して使用してしまうと後で記述した値が前に記述した値を上書きしてしまいますので注意してください。
値は重複していても問題ありません。 すでにあるキーに対してのように新たな値を代入すると古い要素の値である34が上書きされて、新たな値である14に置き替わること
になります。