以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [讨论]使用指南中的字典示例  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=154510)

--  作者:Shily
--  发布时间:2020/9/16 18:12:00
--  [讨论]使用指南中的字典示例
Dim zd As New Dictionary(Of Integer, String)
zd.Add(1,"苹果")
zd.Add(2,"香蕉")
zd.Add(3,"波罗")
zd.Add(4,"桔子")
zd.Add(5,"桃子")
zd.Remove(1) \'移除键1及其对应的值
zd.Remove(5) \'移除键5及其对应的值
Output.Show(zd(2)) \'显示键2对应的值
Output.Show(zd(3)) \'显示键3对应的值
If zd.ContainsKey(1) = False Then \'是否存在键1
    zd.Add(1,"苹果")
End If
If zd.ContainsValue("桃子") = False Then \'是否存在值"桃子"
    zd.Add(5,"桃子")
End If
For Each k As Integer In zd.Keys \'显示所有键及其对应的值
    Output.Show(K & ":" & zd(k))
Next
For Each v As String In zd.Values \'显示所有值
    Output.Show(v)
Next

香蕉
波罗
5:桃子
2:香蕉
3:波罗
4:桔子
1:苹果
桃子
香蕉
波罗
桔子
苹果

为什么打印会是5  2  3  1  4  这样的顺序呢,而不是2  3  4  1  5




--  作者:有点蓝
--  发布时间:2020/9/17 8:36:00
--  
字典是无序的
--  作者:Shily
--  发布时间:2020/9/17 10:21:00
--  

[此贴子已经被作者于2020/9/17 10:26:49编辑过]

--  作者:Shily
--  发布时间:2020/9/17 10:43:00
--  
我是不是可以理解成  原本是  1  2  3  4  5   删除了  1  5   变成了    空  2  3  4 空
然后插入1  占用前一步删除5出来的位置    空  2  3  4  1
再插入5  因为有空位  就成   5  2  3  4  1


新插入的数据 在有空位置的时候会占用上一步删除掉的数据的位置(如果有删除数据的话)
所以像这个删除了两个   插入1 的时候并不会直接插入到第一个位置  形成   1  2  3  4  空
因为插入1的上一步删除的是5,所以占用的应该是5的原本位置   为   空  2  3  4  1这个意思

--  作者:Shily
--  发布时间:2020/9/17 10:56:00
--  
我又删除添加了一个数据尝试了下,发现好像是对应来的

图片点击可在新窗口打开查看图片点击可在新窗口打开查看
删除1  5  3           空   2   空   4   空
插入1    就对应3    空   2    1   4   空
插入5    对应5       空   2    1   4    5
插入3    对应1       3    2    1   4    5
--  作者:有点蓝
--  发布时间:2020/9/17 11:05:00
--  
不一定的,数据少看不出来而已。如果需要使用顺序,改为使用SortedDictionary,用法完全一样,只是这个会按键自动排序

Dim zd As New SortedDictionary(Of Integer, String)

--  作者:Shily
--  发布时间:2020/9/17 11:12:00
--  
好的了解了,谢谢老师