我很想在我的程序中使用Guava的RangeSets。儘管添加和合並範圍的功能,我也對的「尺寸」感興趣。在番石榴的RangeSet /範圍沒有「大小」的概念?
一些言論:
- 沒有範圍我感興趣的是無限的!
- 所有我使用範圍是結合型的「closedOpen」
- 底層用例是一個離散的時間 - 空間(大小=總結時間蜱)
這似乎是不是內置的(或者我沒有看到它),我想知道是否有明確的理由反對這個概念上(這意味着我不應該實現一些getSize()函數我自己)或不。
讓我們看看我的用例:
RangeSet<Integer> usageTicks = TreeRangeSet.create();
usageTicks.add(Range.closedOpen(3, 7));
usageTicks.add(Range.closedOpen(12,18));
usageTicks.add(Range.closedOpen(18, 23));
int size = usageTicks.hypotheticalGetSizeFunction(); // size = 15
是否有任何理由對以下內容:
Set<Range<Integer>> setOfRanges = usageTicks.asRanges();
int sum = 0;
for(Range<Integer> range : setOfRanges)
sum += (range.upperEndpoint() - range.lowerEndpoint());
如果你的範圍重疊,你正在計算一些時間步驟不止一次。你想要這個嗎? – gdiazc
你能詳細說明一下嗎?如果我將範圍Range.closedOpen(14,17)添加到usageTicks(此時與rangeSet重疊),rangeSet的新狀態完全不會改變([[3?7),[12?23)] )。如果添加Range.closedOpen(6,9),rangeSet將會改變([[3?9),[12?23)]),但是當迭代和求和時不會多次求和? – sascha
好吧,我的不好,我想我並不理解什麼'RangeSet'。我想象了''asRanges()''方法會返回最初添加的相同範圍,在這種情況下,如果它們有重疊,我們會加總超過我們想要的。對於那個很抱歉! – gdiazc