我需要编写一个代码,其中我有一个 Groovy 中的范围列表。我需要从所有范围不重叠的列表中创建一个新列表。
例如,如果输入是: [13..15 , 14..16]
我应该能够创建一个包含 [13..16] 或 [13..14, 14..16] 的列表
我真的很感激任何帮助。我现在已经编写了以下代码,但它一点也不工作:
def removeOverlapInRanges(ranges)
{
def cleanedRanges = []
def overLapFound = false
def rangeIsClean = true
def test = "ranges"
ranges.each
{
range->
def index = ranges.indexOf(range)
while (index < ranges.size() -1)
{
if (ranges.get(index + 1).disjoint(range) == false)
{
overLapFound = true
rangeIsClean = false
def nextRange = ranges.get(index + 1)
if (range.from > nextRange.from && range.to < nextRange.to)
cleanedRanges.add(range.from..range.to)
else if (range.from < nextRange.from && range.to < nextRange.to)
cleanedRanges.add(range.from..nextRange.to)
else if (range.from > nextRange.from && range.to > nextRange.to)
cleanedRanges.add(nextRange.from..range.to)
}
index = index + 1
}
if (rangeIsClean)
cleanedRanges.add(range)
rangeIsClean = true
test = test + cleanedRanges
}
cleanedRanges.add(0, cleanedRanges.get(cleanedRanges.size()-1))
cleanedRanges.remove(cleanedRanges.size() - 1)
if (overLapFound)
return removeOverlapInRanges(cleanedRanges)
else
return cleanedRanges
}
我通过了 [12..13, 17..19, 18..22,17..19, 22..23,19..20 ]
作为回报,我得到 [12..13]
提前感谢您的任何输入!