首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这两个范围相交吗?如果是的话,我怎么知道?

这两个范围相交吗?如果是的话,我怎么知道?
EN

Stack Overflow用户
提问于 2014-06-27 18:22:47
回答 4查看 3K关注 0票数 1

来自苹果的文档

返回值--描述range1和range 2的交集的范围--即包含两个范围中存在的索引的范围。 讨论如果返回的范围的长度字段为0,则这两个区域不相交,并且位置字段的值未定义。

好吧,假设我有两个范围:

代码语言:javascript
复制
(lldb) p rangeOne
(NSRange) $3 = location=11, length=4
(lldb) p rangeTwo
(NSRange) $4 = location=14, length=0

我计算出交叉口:

代码语言:javascript
复制
NSRange intersection = NSIntersectionRange(rangeOne, rangeTwo);

结果是:

代码语言:javascript
复制
(lldb) p intersection
(NSRange) $5 = location=14, length=0

我该拿它怎么办?长度是零,所以位置是未知的?但在这种情况下,结果是我所期望的,我能相信吗?计算一个范围长度为零的范围的交集是否无效?

EN

回答 4

Stack Overflow用户

发布于 2014-06-27 18:27:02

我不认为NSIntersectionRange公开这些信息,这是荒谬的,因为他们本可以将location设置为NSNotFound之类的。所以你必须手动完成。我怀疑你是否需要展览,但例如:

代码语言:javascript
复制
BOOL NSRangeIntersectsRange(NSRange range1, NSRange range2)
{
    if(range1.location > range2.location + range2.length) return NO;
    if(range2.location > range1.location + range1.length) return NO;
    return YES;
}

(可能具有比NS更合适的方法名称前缀)

票数 2
EN

Stack Overflow用户

发布于 2014-06-27 18:31:44

如果返回的范围的长度字段为0,则这两个区域不相交,并且位置字段的值未定义。

我认为这意味着当length为0时,范围不是相交的。

代码语言:javascript
复制
BOOL RangesIntersect(NSRange range1, NSRange range2) {
    return NSIntersectionRange(range1, range2).length != 0;
}

他们同意汤米的观点--他们本可以将其设置为NSNotFound --但相反,他们说结果还不确定。此外,我同意零长度范围的位置是毫无意义的.在rangeTwo的职位并不意味着什么。rangeTwo也不能与任何东西交叉。

票数 1
EN

Stack Overflow用户

发布于 2019-04-28 03:09:52

那不是虫子..。你的范围2有0长度所以它和不存在的一样.因此,当您执行NSRange交集= NSIntersectionRange(rangeOne,rangeTwo)时,当然交叉口的长度为0,因为不能与具有0长度的东西相交!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24458542

复制
相关文章

相似问题

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