|
-
Jun 23rd, 2022, 04:52 PM
#1
Thread Starter
New Member
List Sorting conundrum (try at your peril)
Ok, I have been attempting this problem for 2 solid weeks now and have to admit it's driving me insane.
Here is the data:
Code:
RowText AlloIndex PosIndex FromTime ToTime OverLap
test1 0 0 21/06/2022 14:42 22/06/2022 2:43 0
test2 0 0 21/06/2022 14:42 22/06/2022 2:43 1
test3 0 0 22/06/2022 2:42 22/06/2022 14:43 0
test4 0 0 22/06/2022 14:42 23/06/2022 2:43 0
test5 5 5 21/06/2022 19:42 22/06/2022 7:43 0
test6 6 6 21/06/2022 16:42 22/06/2022 4:43 0
test7 7 7 21/06/2022 15:42 22/06/2022 3:43 0
test8 7 7 21/06/2022 19:42 22/06/2022 7:43 1
test9 8 8 21/06/2022 21:42 22/06/2022 9:43 0
test10 8 8 21/06/2022 22:42 22/06/2022 10:43 1
test11 9 9 22/06/2022 0:42 22/06/2022 12:43 0
test12 9 9 21/06/2022 15:42 22/06/2022 3:43 1
test13 9 9 22/06/2022 12:42 23/06/2022 12:43 1
test14 9 9 22/06/2022 10:42 23/06/2022 10:43 1
test15 10 10 21/06/2022 20:42 22/06/2022 8:43 0
test16 10 10 22/06/2022 1:42 22/06/2022 13:43 1
What I am attempting to do is, if there is a time overlap in the same **AlloIndex** group, increase the **PosIndex** of the overlaps by 1 (those identified as an overlap are those greater in time in the same **AlloInndex** group that overlap. I have already highlighted these by the **Overlap** column).
However, this is the tricky part, if an overlap increases the **PosIndex** by 1, all other rows with **PosIndex** values greater than the overlap **PosIndex** are also increased by 1. Example: **PosIndex** 0 has an overlap, so all **PosIndex** greater than 0 also have to increase by 1, in a sense moving them down the rank. **PosIdex** 9, in particular, is very tricky, because you have 4 entries, and 3 overlaps. So you have to increase the **PosIndex** of each overlapped entry by 1 (leaving the 1st entry in the group alone), but also any **PosIndex** greater also needs to increase by 1. Hope this makes sense.
I have tried **FOR LOOPS**, **LINQ**, and **lambda** to no avail...
This is the closest I have come to solving this, but it doesn't work when there are more than 2 overlaps in the same **AlloIndex** Group.
Code:
For Each bar In lst
If prevFromDT < bar.ToTime
And prevToDT > bar.FromTime
And prevIndex = bar.PosIndex Then
bar.overLap = True
End If
next
For Each tsk In lst
If tsk.overLap Then
For Each tsk1 In lst
If tsk1.PosIndex > tsk.PosIndex Then
tsk1.PosIndex += 1
Next
End If
Next
For Each tsk In lst
If tsk.overLap Then
tsk.PosIndex += 1
End If
Next
The resulting data should look like this:
Code:
RowText AlloIndex PosIndex FromTime ToTime OverLap
test1 0 0 21/06/2022 14:42 22/06/2022 2:43 0
test2 0 1 21/06/2022 14:42 22/06/2022 2:43 1
test3 0 0 22/06/2022 2:42 22/06/2022 14:43 0
test4 0 0 22/06/2022 14:42 23/06/2022 2:43 0
test5 5 6 21/06/2022 19:42 22/06/2022 7:43 0
test6 6 7 21/06/2022 16:42 22/06/2022 4:43 0
test7 7 8 21/06/2022 15:42 22/06/2022 3:43 0
test8 7 9 21/06/2022 19:42 22/06/2022 7:43 1
test9 8 10 21/06/2022 21:42 22/06/2022 9:43 0
test10 8 11 21/06/2022 22:42 22/06/2022 10:43 1
test11 9 12 22/06/2022 0:42 22/06/2022 12:43 0
test12 9 13 21/06/2022 15:42 22/06/2022 3:43 1
test13 9 14 22/06/2022 12:42 23/06/2022 12:43 1
test14 9 15 22/06/2022 10:42 23/06/2022 10:43 1
test15 10 16 21/06/2022 20:42 22/06/2022 8:43 0
test16 10 17 22/06/2022 1:42 22/06/2022 13:43 1
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|