バリケンのRuby日記 RSSフィード

2006-10-05

[] 「たのしいRuby 第2版」の練習問題を解く(14)  「たのしいRuby 第2版」の練習問題を解く(14) - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  「たのしいRuby 第2版」の練習問題を解く(14) - バリケンのRuby日記  「たのしいRuby 第2版」の練習問題を解く(14) - バリケンのRuby日記 のブックマークコメント

今日から第12章だよ。

(1) "Ruby is an object oriented programming language"という文字列があります。この文字列を使って次の処理を行ってください。

(a)文字列に含まれる各単語を要素とする配列を作ってください。

(b)(a)の配列アルファベット順にソートしてください。

(c)(a)の配列大文字と小文字の区別をせずにアルファベット順にソートしてください。

(d)すべての単語の先頭を大文字にして"Ruby Is An Object Oriented Programming Language"にしてください。

(f)文字列に含まれる文字とその数を次のような形式で表示させてください(空白文字が6つ、'R'が1つ、'a'が4つ‥‥という意味です)。

' ': ******
'R': *
'a': ****
'b': **
...

たのしいRuby 第2版

じゃあ、ぼくの答えだよ。まずは(a)から。

str = "Ruby is an object oriented programming language"
ary = str.split(/\s+/)

つぎは(b)。

p ary.sort

その次に(c)。

p ary.sort_by{|str| str.downcase}

さらに(d)。

ary.inject([]){|result,str| result << str.capitalize}.join(" ")

なぜか(e)がなくて(f)。

str.split(//).sort.uniq.each{|char|
  puts "'#{char}': #{('*' * (str.size - str.delete(char).size))}"
}

解答例と比較してみると‥‥。(a)のsplit引数は不要なんだね。

あれ、問題番号がちょっとズレてる?(f)の答えが(d)だね。

[][] ActiveRecordで「SQL書き方ドリル」(12)  ActiveRecordで「SQL書き方ドリル」(12) - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  ActiveRecordで「SQL書き方ドリル」(12) - バリケンのRuby日記  ActiveRecordで「SQL書き方ドリル」(12) - バリケンのRuby日記 のブックマークコメント

きょうは「第2章 ひとつのテーブルを扱う」の「その12 グループ単位で集計した結果を絞り込む(1)」をやってみるよ。

ある日、あなたは上司に頼まれました。

「この前の都道府県別顧客数だけど、顧客数が3人以上の都道府県だけを出してくれ」

顧客テーブルの名前はCustomersです。顧客テーブルの中に、都道府県はPrefecturalIDという列が

あります。さて、どのようにすればよいでしょうか。

すらすらと手が動くようになるSQL書き方ドリル

countメソッドの:havingオプションを使うよ。

require 'rubygems'
require 'active_record'

ActiveRecord::Base.establish_connection(
  :adapter  => 'postgresql',
  :host     => 'localhost',
  :username => 'sql_training',
  :password => '(設定したパスワード)',
  :database => 'nyanko'
)

class Customer < ActiveRecord::Base
  set_primary_key :CustomerID
end

puts "都道府県ID 顧客数"

Customer.count(
  :group=>"prefecturalid",
  :having=>"COUNT(*) >= 3"
).each{|item|
  puts "#{item[0]} #{item[1]}"
}
トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20061005