b. *_*ten 15 c# linq algorithm optimization datetime
我面临一个有趣的问题:
是否有可能"重叠"这些范围?也就是说,生成:
也许我可以让它更具图形化.这就是我的第一个:
a |------------------------------|
b |-------------------|
c |-----------------|
Run Code Online (Sandbox Code Playgroud)
这是我想要获得的:
|------|---------|-------|-----|-----|
a a,c a,b,c a,b b
Run Code Online (Sandbox Code Playgroud)
我找到了一种有效的解决方案,但不优雅:
你能想到更好的解决方案吗?我正在使用C#,但任何与语言无关的想法都会非常感激.谢谢!
Jus*_* L. 10
我会
我在解释它时肯定做得不好.我很快就会为此编写一些代码.但在此之前,您的解决方案会发生什么:
a |------------------------------|
b |-------------------|
c |-----------------|
Run Code Online (Sandbox Code Playgroud)
1. Start at day 1, add A to open ranges list, which now contains [A]
2. Move to the start of C. First RESULT RANGE: A range from Day 1 to C's start,
with a value A. (what is in your open ranges list)
3. Add C to the open ranges list, which now contains [A,C]
4. Move to the start of B. Second RESULT RANGE: A range from C's start to B's
start, with a value A,C. (what is in your open ranges list)
5. Add B to the open ranges list, which now contains [A,C,B]
6. Move to the end of C. Third RESULT RANGE: A range from B's start to C's end,
with a value of A,C,B.
7. Remove C from the open ranges list, which now contains [A,B]
8. Move to the end of A. Fourth RESULT RANGE: A range from C's end to A's end,
with a value of A,B
9. Remove A from the open ranges list, which now contains [B]
10. Move to the end of A. Fourth RESULT RANGE: A range from A's end to B's end,
with a value of B
RESULT RANGES
1. from Day 1 to C's start: A
2. from C's start to B's start: A,C
3. from B's start to C's end: A,C,B
4. from C's end to A's end: A,B
5. from A's end to B's end: B
你可以这样做:
以下是前几个步骤,使用样本数据+另一个范围D :("处理"范围表示**double stars**)
a |------------------------------|
b |-------------------|
c |-----------------|
d |------------------------|
Run Code Online (Sandbox Code Playgroud)
1.
Process A
Output ranges: |--------------A---------------|
2.
Process B
- Start of B is in **A**; split A in two:
|-------A-------|------AB------|
- End of B is after any output range range;
creating new output range at end
|-------A-------|------AB------|---B---|
- Nothing was/is in between **A** and (nothing)
3.
Process C
- Start of C is in **A**; split A in two:
|---A----|--AC--|------AB------|---B---|
- End of C is in **AB**; split AB in two:
|---A----|--AC--|--ABC--|--AB--|---B---|
- There were/are no ranges between **A** and **AB**
4.
Process D
- Start of D is in **A**; split A in two:
|-A-|-AD-|--AC--|--ABC--|--AB--|---B---|
- End of D is in **AB**; split AB in two:
|-A-|-AD-|--AC--|--ABC--|ABD|AB|---B---|
- Ranges AC and ABC were/are in between **A** and **AB**
|-A-|-AD-|--ACD-|-ABCD--|ABD|AB|---B---|
Final output: |-A-|-AD-|--ACD-|-ABCD--|ABD|AB|---B---|
| 归档时间: |
|
| 查看次数: |
2818 次 |
| 最近记录: |