From: kai13@... Date: 2001-02-26T15:23:50+09:00 Subject: [ruby-list:28297] Re: 配列をハッシュへ 配列からハッシュの変換は頻度のヒストグラムを作る時によく使います。 それを意識したものですが、もう少し改良すすれば汎用性が持たせられると 思いますが、どうでしょうか。 ● 方針 ● ・衝突するものはブロックで処理 ・一括でないと処理できない状況は思いつかないので無視(出来たらいいな) class Ary2 < Array def to_hash hash = {} self.each do |item| break unless item value = item[1] if hash.has_key?(item[0]) # キーが衝突した時の処理 # 一括して処理したい場合をどうにかしたいけど。 value = yield(hash[item[0]],value) hash[item[0]] = value else hash[item[0]] = value end end hash end end if $0 == __FILE__ a0 = Ary2.new a0 << ['apple',150] a0 << ['banana',30] a0 << ['egg',20] a0 << ['apple',30] p a0 # 衝突したら平均を返す p a0.to_hash{|a,b| print "collision\n";(a+b)/2} end ● 結果 ● [["apple", 150], ["banana", 30], ["egg", 20], ["apple", 30]] collision {"egg"=>20, "banana"=>30, "apple"=>90} --