在Visual Basic中,我有一个Dictionary,它将Date作为键,将自定义类作为值(我将在示例中使用String)。 我会跟踪一个用值保存日期的列表。 例如,假设我有一个包含以下值的字典:
Dim dict As Dictionary(Of Date, String)
dict.Add(DateTime.Now, "test one") // Suppose the time of this date is 12:03:10
dict.Add(DateTime.Now, "test two") // Suppose the time of this date is 13:07:20
dict.Add(DateTime.Now, "test three") // Suppose the time of this date is 14:15:30
dict.Add(DateTime.Now, "test four") // Suppose the time of this date is 15:19:40
现在系统给了我一个没有值的日期,但需要一个类似于前一个日期的日期。 假设我得到时间14:00:00的日期,我将需要“测试二”的值,因为13:07:20是低于14:00:00的第一个键(一个实际上不可用的键)字典键)。
假设列表可能非常大,有什么方法/什么是找到我要找的密钥的最佳方法?
答案 0 :(得分:1)
Keys
方法将为您提供包含所有键的数组。
Dim k As Variant
k = dict.Keys
然后,您可以遍历该数组以找到满足该标准的键。这是一个例子,没有彻底检查......
Dim myDate As Variant
Dim myKey As Variant
myDate = 1234 ' or whatever your target date is
Dim i As Long
myKey = k(0)
For i = 1 To UBound(k)
If k(i) < myDate And k(i) > myKey Then
myKey = k(i)
End If
Next i
myKey
现在应包含满足您标准的密钥。
答案 1 :(得分:1)
(无法在8小时内发布我自己的问题......)
使用我的字典并使用dict.Keys我做了:
Dim lookupDate As Date = Date.Parse("01/01/2008 12:17:39")
Dim query = dict.Keys.AsQueryable().Where(Function(singleKey) singleKey < lookupDate)
Dim result As String = query.Last().ToString()
这个解决方案应该具有更好的性能,因为iQueryable是正确的。