Foxtable(狐表)用户栏目专家坐堂 → [求助]魔力学狐表_字典问题


  共有3770人关注过本帖树形打印复制链接

主题:[求助]魔力学狐表_字典问题

帅哥哟,离线,有人找我吗?
morlay2013
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:73 积分:748 威望:0 精华:0 注册:2013/10/19 8:15:00
[求助]魔力学狐表_字典问题  发帖心情 Post By: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代表的是键,即应该输入出它的键,而不是它的值吧?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/5 17:17:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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编辑过]

 回到顶部