打印

[问题求助] 如何判断两个Range有交叉?

如何判断两个Range有交叉?

例如:

r1 = 1..3
r2 = 2..4

r2.include?r1


include不行,那么是什么呢?

TOP



(r1.to_a & r2.to_a).size == 0


TOP



class Range 
  def interact(other)
    r = [self.first, other.first].max..[self.last, other.last].min
    r if r.first <= r.last
  end
end


p (1..3).interact(2..4) #2..3
p (1..3).interact(5..6) #nil
p (3..1).interact(2..4) #nil

[ 本帖最后由 5swords 于 2008-4-17 09:43 编辑 ]

TOP

真是奇思妙想啊。多谢两位!

TOP

p (1..3).interact(5..6) #nil
p是什么呀。
p和后面括号之间没有空格居然还报错。

TOP

回复 5# 的帖子

irb(main):001:0> puts "a", "\nb"
  a
  b
  => nil
  irb(main):002:0> p "a", "\nb"
  "a"
  "\nb"
  => nil
  irb(main):003:0> print "a", "\nb"
  a
  b=> nil

  puts会识别双引号""内的转义符,每打印一串信息,在结果后面自动换行。
  print也会识别双引号""内的转义符,但每打印一串信息,不会在结果后面自动换行。
  p则不会识别双引号""内的转义符,怎样的内容就怎样按原来的字符串输出,且在结果后自动换行。

http://blog.chinaunix.net/u1/37038/showart_489434.htm
本帖最近评分记录
  • zhangwei R币 +5 2008-5-23 11:38
  • 5swords R币 +3 原来是因为p最短, 所以一真用它, 现在知道了 ... 2008-5-22 08:55

TOP

2008-11-23 23:23 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61