From: matz@... (Yukihiro Matsumoto) Date: 1998-10-14T10:59:37+09:00 Subject: [ruby-list:10081] Re: array. まつもと ゆきひろです In message "[ruby-list:10074] array." on 98/10/14, Wyvern of Wyvern 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