获取Visual Basic Dictionary中的“最近”键

时间:2011-09-29 07:37:08

标签: vb.net dictionary

在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的第一个键(一个实际上不可用的键)字典键)。

假设列表可能非常大,有什么方法/什么是找到我要找的密钥的最佳方法?

2 个答案:

答案 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是正确的。