(小ネタ続き)取得した人狼BBS参加者リストを解析
参加者IDをこんな感じでテキストファイルに保存。
=====501村===== master knight ・ ・ ・ seena totoro =====502村===== master yamadayama ・ ・ ・ bdheki turugi
これを以下のスクリプトで解析
require 'benchmark' puts Benchmark.measure { file = File.open("C:/share/jinro_list.txt") @arr = Array.new file.each_line do |line| line = line.chomp! next if line =~ /=====/ if @arr.assoc(line) elem = @arr.assoc(line) @arr.delete(@arr.assoc(line)) @arr << [line,elem[1] + 1] else @arr << [line,1] end end } @arr.each do |elem| puts elem.join("\t") end
@arrは2重配列でデータベース的役割を果たす。
1回目に登場したIDは[ID名、1]の形式で@arrに入力。
2回目以降は[ID名、登場回数]を[ID名、登場回数+1]とする。
最後にお約束のarr.eachで出力して終了。
#assocは2重配列を処理するのにすごぶる便利な関数です。
#assocは2重配列の0番目の要素を検索し、ヒットすると配列を返す。
# ID,参加回数の形式で収納 arr = [ ["master",5], ["teraco",1], ["dolp",8], ["namayo",13], ["aiko",2] ] # xの参加回数を調べる場合 p arr.assoc("namayo") #=> ["namayo", 13] p arr.assoc("namayo")[1] #=> 13
欠点は最初にヒットした要素しか返さないこと。0番目の要素をキーとしユニークとなる配列を組む必要がある。
2重配列の1番目の要素を検索し、ヒットすると配列を返す#rassocメソッドもご参考。