プログラミング基礎 II

第十一回 (2010年12月13日)

連想配列

http://www.sw.it.aoyama.ac.jp/2010/PB2/lecture11.html

Martin J. Dürst

AGU

© 2010 Martin J. Dürst 青山学院大学

今日の予定

これからの予定

前回の復習

前回の演習 1

提出: 12月10日 (金曜日) 22:00 までに Moodle に famous_accessors.rb のファイル名で投稿

以前作った famous_class.rb (正解例でも可能; 以前「発展問題」で行った danger を含む) でアクセスメソッドを attr_... に書き換えなさい。

ヒント: class Person 内の変更だけが必要

正解例: 都合により削除

前回の演習 2

提出: 12月10日 (金曜日) 22:00 までに Moodle に famous_methods.rb のファイル名で投稿

演習 1 のプログラムで bmi と danger の計算をメソッドに変更しなさい。更に、有名人一人分の出力となる一行の作成メソッドも作りなさい。

ヒント:

正解例: 都合により削除

前回の演習 2 の書換え

変数無し:

readlines.collect do |input_line|
  Person.new(input_line)
end.sort_by do |person|
  person.weight
end.each do |person|
  puts person.output_line
end

do ... end{ ... } に変更:

readlines
 .collect { |input_line|  Person.new(input_line) }
 .sort_by { |person|  person.weight }
 .each { |person|  puts person.output_line }

配列の限界

配列の限界の具体例

月名の配列:

month_names = [nil, 'January', 'February', 'March', 'April',
'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December']

month_names[12]December

逆のものが欲しい:

month_numbers['December']12

連想配列の具体例

month_numbers = { 'January' => 1, 'February' => 2, 'March' => 3,
                  'April' => 4, 'May' => 5, 'June' => 6,
                  'July' => 7, 'August' => 8, 'September' => 9,
                  'October' => 10, 'November' => 11, 'December' => 12 }

使用例:

month_numbers['December']12

連想配列

(associative array)

連想配列の例

連想配列の初期化

連想配列の使用と変更

使用 (値の取出し):

一般的な形: ハッシュ[キー]

具体例: month_numbers['December']

変更 (値の変更又は要素の追加):

一般的な形: ハッシュ[キー] =

具体例: month_numbers['December'] = 12

要素の削除:

一般的な形: ハッシュ.delete(キー)

具体例: month_numbers.delete('December')

連想配列のメソッド

要素 (キー) の存在: ハッシュ.has_key?(キー)

すべてのキー: ハッシュ.keys (→ 配列)

すべての値: ハッシュ.values (→ 配列)

定数

具体例: Translation = { 'height' => '身長', 'normal' => '普通体重', ...}

演習 1

提出: 12月17日 (金曜日) 22:00 までに Moodle に famous_hash.rb のファイル名で投稿

以前作った famous_method.rb (正解例でも可能) に連想配列を追加して、出力する文字列 (height, weight, normal, obese など) を日本語に置き換えるようなプログラムを作成しなさい。

ヒント:

発展問題: 複数の言語が使えるようにする (ハッシュのハッシュ)

演習 2

提出: 12月17日 (金曜日) 22:00 までに Moodle に words.rb のファイル名で投稿

英語などの文書の入力 (< ファイルまたは直接入力) を行と単語に分解し、それぞれの単語の数を数えて、アルファベット順にきれいに出力しなさい。

入力例: Ottos Mops, President Obama's speaches

ヒント: 文字列の delete メソッドで ,.!?;:'" など記号を取り除く

発展問題: 単語の頻度順で出力