首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算Ruby中两个普通区间的交集?

问如何计算Ruby中两个普通区间的交集?
EN

Stack Overflow用户
提问于 2014-07-24 05:12:06
回答 3查看 334关注 0票数 2

区间以它们的边界作为数组a,b和x,y。我想计算它们之间交集的长度。根据这个页面:http://world.std.com/~swmcd/steven/tech/interval.html

我能看出来如果是0

代码语言:javascript
复制
(not (a < y && x < b)) 

拿着。

例如,间隔1.2、4.3和2.1,5.5相交长度为4.3- 2.1 = 2.2。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-24 05:24:10

这样就行了。

码

代码语言:javascript
复制
def length(a,b,p)
  [[a.last,b.last].min - [a.first,b.first].max,0].max.round(p)
end

示例

​

​

票数 6
EN

Stack Overflow用户

发布于 2014-07-24 05:32:35

这是同一个问题的OO解决方案。我建议构建一个自定义的Interval类,但是这个实现只是一个例子,询问者应该考虑一下他的实际情况:

代码语言:javascript
复制
class Interval
  attr_reader :range

  def initialize range
    @range = if range.nil? then nil else
               fail TypeError, "Begin greater than end!" if range.begin > range.end
               Range.new( range.begin, range.end )
             end
  end

  def - other
    begin
      self.class.new [ range.begin, other.range.begin ].max ..
                     [ range.end, other.range.end ].min
    rescue TypeError
      self.class.new nil
    end
  end

  def size
    range.nil? ? 0 : range.end - range.begin
  end
end

def Interval a, b # a convenience constructor
  Interval.new a .. b
end

( Interval( 1.2, 4.3 ) - Interval( 2.1, 5.5 ) ).size
#=> 2.199999999999997
票数 0
EN

Stack Overflow用户

发布于 2016-02-02 07:48:05

仅供参考-在MySQL卡的答案将是(没有四舍五入部分):

代码语言:javascript
复制
GREATEST( LEAST(`a_last`, `b_last`) - GREATEST(`a_first`, `b_first`), 0 )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24925581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档