Ad Network

あわせて読みたい

  • あわせて読みたい

« オブジェクトを次々に渡す「Ruby Filter」ってどうだろう | Main | ESPN MVP が FieceMobile の Top 10 App 入り »

教えながら学ぶRuby:「Rangeの積を求める」をやってみた

 今日は必要もなく早起きしてしまったので、Rubyに感して書かれた過去のブログなどをネットサーフィング。すると、「Rangeの積を求める」に遭遇。この手のものに出会うと、かならず自分で解きたくなるのが私の性分。1年以上の激遅レス。

class Range
 def &(dest)
  return nil if self.max <= dest.min or dest.max <= self.min
  return ([self.min, dest.min].max..[self.max, dest.max].min)
 end
end

 Rubyでmin/maxをどう書けば良いのか分からず少し苦労してしまったが、Arrayを使うのだと一度理解してしまえば簡単。たかがmin/maxのためにオブジェクトを作るという点にはどうも抵抗があるが、これは慣れるしかないのだろう。

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d8341c4f9853ef00e54ef8738b8833

Listed below are links to weblogs that reference 教えながら学ぶRuby:「Rangeの積を求める」をやってみた:

» [Ruby]Rangeの積 from nidoの雑記
「Rangeの積を求める」をやってみたにはコメントしたのだが、ちゃんと実装するのは面倒そうと思っていた。 で、いざ実装してみると、やっぱり面倒だった・・。 to_aして、変換できるクラス(succが定義されているクラス)ならそのArrayの積を取る。 効率は悪そうだけど、こ... [Read More]

» [Ruby] Rangeの積 from blanket sky
ここ経由で知った古い話題。 空区間をどう表現するかは議論の余地があると思うけど、 a b c とかやるならnilよりは放置かなぁ。 class Range def (rhs) beginer = [self, rhs].max {|a,b| a.begin = b.begin } ender = [self, rhs].min {|a,b| a.end #6... [Read More]

Comments

masuidrive

懐かしい話がw
min/maxを使うのは新しいですね

ujihisa

min/maxだと、(0.0...1.0)などの場合に対処できません。
endを使ってみてはいかがでしょうか。

nido

('a'..'z')&('aa'..'zz')の結果が・・。
効率を考えなければ
class Range
 def &(dest)
  w=self.to_a&dest.to_a
  w.empty? ?nil:w.min..w.max
 end
end
がシンプルな解でしょうか。
to_aやmin,maxが使えないRangeオブジェクトについては別対応が必要ですが。

Post a comment

This weblog only allows comments from registered users. To comment, please Sign In.