From: Shun Fukuzawa Date: 2004-08-21T12:21:55+09:00 Subject: [ruby-list:39966] Re: XMLの配列のinclude?ができない? ゆきちです。 SASADA Koichi wrote: > Shun Fukuzawa wrote : > [ [ruby-list:39964] XMLの配列のinclude?ができない? ] > at Sat, 21 Aug 2004 03:36:27 +0900 > >  ささだです. > > > >  Array#include? は,要素を == で比べているため,自分が期待す > る同値判定と違うものになっているんではないでしょうか. > >  というわけで,こんな感じでどうでしょうか.include? の代わり > に any? を使ってみました.そして,同値判定として, > entry#attirbute['about'] を使っています.RSS に詳しくないので, > 本当にこれでいいのか自信がないのですが. > なるほど。一度イレテータを通して、全てチェックし直しているのですね。 > > require 'open-uri' > require 'rexml/document' > include REXML > > RSS_URIs = { > :SLASH_NORMAL => 'http://slashdot.jp/slashdotjp.rss', (略) > :SLASH_SLA => 'http://slashdot.jp/slash.rss', > } > # > # address = %w(slashdotjp.rss ...).map{|e| 'http://slashdot.jp/' + e} > # でよかったかも > # > ありがとうございます。こういうやりかたの方が分かりやすいので、使わせて頂 きます。 > address = RSS_URIs.values > > d = Array.new > address.each{|a| > # 開きっぱなしにするよりは, > # ブロックでファイルを開く有効範囲を決めたほうがいいと思います > 了解です。 > open(a){|f| > c = Document.new(f).root > c.elements.to_a('//item').each{|e| > d << e unless d.any?{|de| > e.attributes['about'] == de.attributes['about'] > } > } > } > } > d.sort!{|s,t| > s.elements['dc:date'].text <=> t.elements['dc:date'].text > } > d.reverse! > puts d > 以上で、ほぼ望みのことは、達成できました。 あとは、精進して、自分のスクリプトを作りたいと思います。 ありがとうございました。