まつもと ゆきひろです

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