まつもと ゆきひろです
In message "[ruby-list:10074] array."
on 98/10/14, Wyvern of Wyvern <wyvern / pb3.so-net.ne.jp> writes:
|田中です。
|
|えーとすみません、連想配列の使いかたが良く分からないのですが、
rubyではperl5同様ハッシュと呼んでます.連想配列でも全然構わ
ないんですが.
|ruby にのりかえるのは、ruby 本がでてからでいいや、と思って待っていたの
|ですがなかなかでないので、
すいません.(_ _)
|やりたいことは、 perl で書くと以下のようなことです。
|わからないのは $array{$page[1]}++; のカウントと、%array のソート。あたり。
気を付けるべき点は
* ハッシュは初期化が必要
* 文字列と数値には明示的な変換が必要
* 引数の順番が(レシーバがあるので)異なる
* sortよりsort!の方がその場でソートするので効率が良い
くらいでしょうか.
で,動作確認もしてませんが,変換するとこんな感じです.
|--------
#!/usr/bin/ruby
hash = {}
# hash = Hash.new(0) # 1.1d以降はデフォルト値が指定できる
while gets
line = $_.split(/\"/)
page = line[0].split(" ")
if (page[1].length != 1)
page[1] = page[1][0, page[1].rindex("/")]
end
# page count.
hash[page[1]] = hash.fetch(page[0], 0)+1
# 1.1d以降は hash[page[1]] += 1 と書ける
end
# hit page report.
cnt = 0
print "\n\n\n"
print " hit : Directory\n"
print "-----------------------------------------\n"
for name in hash.keys.sort!{|a,b| hash[b] <=> hash[a]}
cnt += 1
printf(" %5d : %8d : %s\n", cnt, hash[name] , name)
end