Mau*_*itz 2 vb.net sorteddictionary
关于从a获得"第一"项目的方法有很多很多线索Dictionary,以及为什么这样的事情不是一个好主意的各种答案,因为没有内部排序.但我的是a SortedDictionary,所以这些论点不适用.然而,我无法找到一种方法来获得Nth项目,而SortedDictionary不是一个Dictionary.
这是我的SD:
FRs As SortedDictionary(Of DateTime, ScheduleItem)
Run Code Online (Sandbox Code Playgroud)
我看到了一些我应该能做的提示:
If FRs.Count = 1 Then
FirstFR = FRs.Keys(0)
Run Code Online (Sandbox Code Playgroud)
但这在我的代码中无效 - 它表示它没有默认值,也无法编入索引..FirstLINQ中似乎都有其他选项,我无法定位.那么以这种方式访问它有什么简单的方法吗?
注意:提供的任何解决方案都不能使用LINQ,这在许多非Wintel平台上都不存在.
问题是a SortedDictionary确实是由密钥排序的.但这并不意味着您可以通过索引访问它.所以如果你不能使用LINQ:
Dim firstFR As KeyValuePair(Of DateTime, ScheduleItem)
For Each kv In FRs
firstFR = kv
Exit For
Next
Run Code Online (Sandbox Code Playgroud)
否则你可以简单地使用First/ FirstOrDefault.
旁注:由于a KeyValuePair(Of Tkey, TValue)是一个结构,因此是一个值类型,它永远不会是null/ Nothing.你可以用这种丑陋的方式检查一本空字典:
If firstFR.Equals(New KeyValuePair(Of DateTime, ScheduleItem))
Console.WriteLine("Empty dictionary")
End If
Run Code Online (Sandbox Code Playgroud)
所以它的可读性更强If FRs.Count = 0 Then ....
更新:如果您只想要给定索引处的键或值,您可以使用:
Dim firstSchedule As Date = FRs.Keys(0)
Run Code Online (Sandbox Code Playgroud)
或者第一个Date:
Dim firstDate As ScheduleItem = FRs.Values(0)
Run Code Online (Sandbox Code Playgroud)
通过这种方式,即使没有LINQ,您也可以通过索引获得两个:
Dim firstFR = new KeyValuePair(Of DateTime, ScheduleItem)(FRs.Keys(0), FRs.Values(0))
Run Code Online (Sandbox Code Playgroud)
免责声明:根据我在这里的问题,这只有在你导入的情况下才有效System.Linq,然后Enumerable.ElementAt隐式使用,如果类型没有实现,它会枚举序列以通过索引查找项目IList(Of T).所以在这种情况下不要使用它.
| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |