Chr*_*ton 20
只是一个伪代码猜测:
Set<Range> determineIntersectedRanges(Range range, Set<Range> setofRangesToTest)
{
Set<Range> results;
foreach (rangeToTest in setofRangesToTest)
do
if (rangeToTest.end <range.start) continue; // skip this one, its below our range
if (rangeToTest.start >range.end) continue; // skip this one, its above our range
results.add(rangeToTest);
done
return results;
}
Run Code Online (Sandbox Code Playgroud)
我会创建一个Range类,并给它一个方法boolean intersects(Range).然后你可以做一个
foreach(Range r : rangeset) { if (range.intersects(r)) res.add(r) }
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用一些Java 8风格的函数式编程以明确:
rangeset.stream().filter(range::intersects).collect(Collectors.toSet())
Run Code Online (Sandbox Code Playgroud)
交叉路口本身就像
this.start <= other.end && this.end >= other.start
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16802 次 |
| 最近记录: |