[#39948] exit in Ruby/GTK window — NAWATE Masahiko <strike@...>

縄手@松江です.

31 messages 2004/08/10
[#39949] Re: exit in Ruby/GTK window — Masao Mutoh <mutoh@...> 2004/08/10

むとうです。

[#40526] procの動作について(質問) — "Hisashi Yahata" <yahatah@...> 2005/01/13

[#39973] 初心者向けの意見交換の場は?簡単な質問はどこにすればよいでしょうか。 — "Hisashi Yahata" <yahatah@...> 2004/08/26

60歳間近になった素人ですが、rubyに興味をもち、勉強を始めました。

[ruby-list:39965] Re: XMLの配列のinclude?ができない?

From: SASADA Koichi <ko1@...>
Date: 2004-08-20 19:27:27 UTC
List: ruby-list #39965
  Shun Fukuzawa <shfukuzawa@jcom.home.ne.jp> wrote :
    [ [ruby-list:39964] XMLの配列のinclude?ができない? ]
    at Sat, 21 Aug 2004 03:36:27 +0900

 ささだです.

> ここの、
>>      d << e unless d.include?(e)
> なのですが、slashdotから配信されているRSSは、全部で11ありまして、中に、
> 同じデータが含まれている場合があり、それを排除したいのですが、うまくいき
> ません。同じく、
>>      d.uniq!
> もやってみているのですが、うまくいきません。

 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_ASK    => 'http://slashdot.jp/askslashdot.rss',
:SLASH_BOOK   => 'http://slashdot.jp/books.rss',
:SLASH_DEV    => 'http://slashdot.jp/developers.rss',
:SLASH_INT    => 'http://slashdot.jp/interview.rss',
:SLASH_KERNEL => 'http://slashdot.jp/linuxkernel.rss',
:SLASH_MAC    => 'http://slashdot.jp/mac.rss',
:SLASH_MOB    => 'http://slashdot.jp/mobile.rss',
:SLASH_SCI    => 'http://slashdot.jp/science.rss',
:SLASH_SEC    => 'http://slashdot.jp/security.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


-- 
// SASADA Koichi at atdot dot net
//


In This Thread