根据下一行或最后一行从字典中删除行
Removing rows from a Dictionary based on the next or last row
这是 的分支。这样考虑数据:
1/1/2000 10000
1/1/2001 10000
1/1/2002 10000
10/1/2003 11000
1/1/2004 11000
1/1/2005 11000
6/1/2006 10000
9/1/2006 12000
正在将此数据收集到 SortedDictionary
中,以日期作为键。我想将其转换成这种格式:
1/1/2000 10000
10/1/2003 11000
6/1/2006 10000
9/1/2006 12000
也就是说,我想要任何给定唯一值的最早日期的项目。通常当我遇到这类问题时,我会向后迭代...
for i = items.count - 1 to 1 step -1
if item(i) is like item(i-1) remove item(i)
next
但是如何用 SortedDictionary
做到这一点? Linq 提供了一个反向枚举器和一个类似索引的东西,但 Linq 仅在 Windows 上可用。在我不熟悉的基本 VB.net 中有没有简单的方法可以做到这一点?
我通过制作 List(Of Date)
解决了这个问题,向后迭代,然后从 List
中删除条目。然后我遍历结果并从 SortedDictionary
中删除任何键。但这真的很难看,而且比我想要的要多很多行。
要在不使用 Linq 的情况下通过比较字典中的项目 N 和 N-1 从 SortedDictionary 中删除行,我提出以下解决方案:
1-将字典值转换为数组。
2-比较数组中的项目 N 和 N-1。
3-按索引从字典中删除行。
'sd is your SortedDictionary
Dim sdArray(sd.Keys.Count - 1) As Integer
sd.Values.CopyTo(sdArray, 0)
For i = sd.Keys.Count - 1 To 1 Step -1
If sdArray(i) = sdArray(i-1) then
Dim index As Integer = 0
For Each p As KeyValuePair(Of DateTime, integer) In sd
if index = i then sd.Remove(p.Key) : Exit For
index += 1
Next
End If
Next
如果您想要任何给定唯一值的最早日期项目,请使用此代码:
For i = sd.Keys.Count - 1 To 1 Step -1
For j = i - 1 To 0 Step -1
If sdArray(i) = sdArray(j) then
Dim index As Integer = 0
For Each p As KeyValuePair(Of DateTime, integer) In sd
if index = i then sd.Remove(p.Key) : Exit For
index += 1
Next
Exit For
End If
Next
Next
这是
1/1/2000 10000
1/1/2001 10000
1/1/2002 10000
10/1/2003 11000
1/1/2004 11000
1/1/2005 11000
6/1/2006 10000
9/1/2006 12000
正在将此数据收集到 SortedDictionary
中,以日期作为键。我想将其转换成这种格式:
1/1/2000 10000
10/1/2003 11000
6/1/2006 10000
9/1/2006 12000
也就是说,我想要任何给定唯一值的最早日期的项目。通常当我遇到这类问题时,我会向后迭代...
for i = items.count - 1 to 1 step -1
if item(i) is like item(i-1) remove item(i)
next
但是如何用 SortedDictionary
做到这一点? Linq 提供了一个反向枚举器和一个类似索引的东西,但 Linq 仅在 Windows 上可用。在我不熟悉的基本 VB.net 中有没有简单的方法可以做到这一点?
我通过制作 List(Of Date)
解决了这个问题,向后迭代,然后从 List
中删除条目。然后我遍历结果并从 SortedDictionary
中删除任何键。但这真的很难看,而且比我想要的要多很多行。
要在不使用 Linq 的情况下通过比较字典中的项目 N 和 N-1 从 SortedDictionary 中删除行,我提出以下解决方案:
1-将字典值转换为数组。
2-比较数组中的项目 N 和 N-1。
3-按索引从字典中删除行。
'sd is your SortedDictionary
Dim sdArray(sd.Keys.Count - 1) As Integer
sd.Values.CopyTo(sdArray, 0)
For i = sd.Keys.Count - 1 To 1 Step -1
If sdArray(i) = sdArray(i-1) then
Dim index As Integer = 0
For Each p As KeyValuePair(Of DateTime, integer) In sd
if index = i then sd.Remove(p.Key) : Exit For
index += 1
Next
End If
Next
如果您想要任何给定唯一值的最早日期项目,请使用此代码:
For i = sd.Keys.Count - 1 To 1 Step -1
For j = i - 1 To 0 Step -1
If sdArray(i) = sdArray(j) then
Dim index As Integer = 0
For Each p As KeyValuePair(Of DateTime, integer) In sd
if index = i then sd.Remove(p.Key) : Exit For
index += 1
Next
Exit For
End If
Next
Next