gpt4 book ai didi

vb.net - SortedDictionary 中的第一项?

转载 作者:行者123 更新时间:2023-12-01 22:05:42 31 4
gpt4 key购买 nike

有很多很多线程讨论如何从字典获取“第一个”项目,并且有各种各样的答案来解释为什么这样的事情实际上并不是一件好事这个想法是因为没有内部排序。但我的是一个 SortedDictionary,所以这些参数不适用。然而,我找不到比 Dictionary 更容易从 SortedDictionary 获取第 N 个项目的方法。

这是我的 SD:

FRs As SortedDictionary(Of DateTime, ScheduleItem)

我看到一些我应该能够做到的提示:

If FRs.Count = 1 Then
FirstFR = FRs.Keys(0)

但这在我的代码中无效 - 它说它没有默认值并且无法索引。 .First 和其他选项似乎都在 LINQ 中,我无法定位它。那么有什么简单的方法可以以这种方式访问​​它吗?

注意:提供的任何解决方案不得使用 LINQ,许多非 Wintel 平台上不存在 LINQ。

最佳答案

问题是 SortedDictionary确实是按键排序的。但这并不意味着您可以通过索引访问它。因此,如果您无法使用 LINQ:

Dim firstFR As KeyValuePair(Of DateTime, ScheduleItem)
For Each kv In FRs
firstFR = kv
Exit For
Next

否则你可以简单地使用 First/FirstOrDefault .

旁注:自从 KeyValuePair(Of Tkey, TValue)是一个结构体,因此是一个值类型,它永远不是 null/Nothing 。您可以用这种丑陋的方式检查空字典:

If firstFR.Equals(New KeyValuePair(Of DateTime, ScheduleItem))
Console.WriteLine("Empty dictionary")
End If

因此使用 If FRs.Count = 0 Then ... 更具可读性.

<小时/>

<罢工>更新:如果您只想要给定索引处的键或值,可以使用:

Dim firstSchedule As Date = FRs.Keys(0)

或者第一个Date其中:

Dim firstDate As ScheduleItem = FRs.Values(0)

通过这种方式,即使没有 LINQ,您实际上也可以通过索引获取两者:

Dim firstFR = new KeyValuePair(Of DateTime, ScheduleItem)(FRs.Keys(0), FRs.Values(0))

<罢工>

免责声明:根据my question here仅当您导入 System.Linq 时,此操作才有效,然后Enumerable.ElementAt隐式使用,如果类型未实现 IList(Of T),则枚举序列以通过索引查找项目。所以在这种情况下不要使用它。

关于vb.net - SortedDictionary 中的第一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36918321/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com