以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]魔力学狐表_字典问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=42163)

--  作者:morlay2013
--  发布时间:2013/11/5 17: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 \'是否存在值"苹果"
    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

以上代码运行结果如下:
5:桃子
2:香蕉
3:波罗
4:桔子
1:苹果

问题:
一、代码中首先添加的是苹果,再添加的是桃子,苹果加在了桔子的后面,而桃子怎么跑到最前面去了?即为什么不是这样的结果:
2:香蕉
3:波罗
4:桔子
1:苹果
5:桃子
二、我在学习前面数组及集合的时候我都试过了,若从数组或集合中删除一个值,后面的内容会依次顶上去(即把被删除的位置补上),而这个字典看样子好像不是这样的,请问它又是怎么样一个结构呢?
三、Output.Show(K & ":" & zd(k))这句代码在输出的时候以(键:值)这样的方式输出,但是按照定义zd(k)中的K代表的是键,即应该输入出它的键,而不是它的值吧?

--  作者:狐狸爸爸
--  发布时间:2013/11/5 17:17:00
--  

1、字典没有顺序,是根据键值离开查询的,无需考虑顺序的问题,内部的结构,就是资深的程序员估计也没有几个清楚,也没有兴趣研究。

 

2、根据你的代码,K是键,zd(K)是此键对应的值


--  作者:有点甜
--  发布时间:2013/11/5 19:47:00
--  
 字典是无序的,不过字典也可以按照key来排序的,参考

Dim dic As New SortedDictionary(of Integer, String)
dic.add(5, "广东")
dic.add(6, "湛江")
dic.add(1, "中国")

For Each i As String In dic.Keys
    msgbox(i & " " & dic(i))
Next
[此贴子已经被作者于2013-11-5 19:47:36编辑过]