| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2216 人关注过本帖
标题:如何查询字典中的值?
只看楼主 加入收藏
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
结帖率:89.13%
收藏
 问题点数:0 回复次数:16 
如何查询字典中的值?
字典内容如图:
图片附件: 游客没有浏览图片的权限,请 登录注册


除了将字典内容全部读取,分解成数组。FOR……Next循环比较。这种方法太慢。

有没有更快更方便的查询方法。

请赐代码,谢谢。

比如我要查询:者 的五笔编码。

[此贴子已经被作者于2022-9-2 16:41编辑过]

搜索更多相关主题的帖子: 字典 比较 内容 查询 方法 
2022-09-02 16:39
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
排序 ,对分法查找 。
--------------
只是单字,还有一种方法
多用点内容,把所有的字根据内码换算成下标,
如,先转正数,然后 减于 啊 的数值,换算成0-N
读取时,每读到一个,按上面换算,换算结果当作下标,保存编码

使用时,按上面换算,当作下标 ,直接读编码
---------------
嗯,不用查表了。


授人于鱼,不如授人于渔
早已停用QQ了
2022-09-02 17:31
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
收藏
得分:0 
回复 2楼 风吹过b
你这种方法不实用。

将文本作为数据库进行检索,应该很快。

程序代码:
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

strPathToTextFile = "C:\Scripts\"
strFile = "Test.txt"

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & strPathtoTextFile & ";" & _
          "Extended Properties=""text;HDR=NO;FMT=Delimited"""

objRecordSet.Open "Select DISTINCT * FROM " & strFile, _
    objConnection, adOpenStatic, adLockOptimistic, adCmdText
………………………………
……………………

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-02 18:47
kings12333
Rank: 2
等 级:论坛游民
帖 子:114
专家分:66
注 册:2012-11-29
收藏
得分:0 
回复 3楼 yuma
楼主,用这个思路来个完整的代码,并将写成函数式的,看看速度快多少,我有个文件4000多行,也是需要每次循环打开TXT一个个查找到了数据再返回,如果有100个需要查找项,这样就要打开TXT一百快,这样好慢。。感觉你的这种思路非常好。
2022-09-05 23:23
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
收藏
得分:0 
回复 4楼 kings12333
图片附件: 游客没有浏览图片的权限,请 登录注册


像我这样

你的字典前是一个汉字单字,查询的值不能有汉字(除汉字外都可以)。我才能提供代码。

因为我的代码只能应用于我的场景。


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-06 13:10
kings12333
Rank: 2
等 级:论坛游民
帖 子:114
专家分:66
注 册:2012-11-29
收藏
得分:0 
回复 5楼 yuma
附档有4000+行,弄个涵数,只要一输代码如“600080”,这行的数据就直接带出来了
StkCode.rar (149.93 KB)
2022-09-07 18:36
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
收藏
得分:0 
将文件全部内容切分为数组,每个数组值为一行。数组常驻内存,避免多次重复读写文件。

找到相对应的数组值就出来了。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-07 20:15
kings12333
Rank: 2
等 级:论坛游民
帖 子:114
专家分:66
注 册:2012-11-29
收藏
得分:0 
回复 7楼 yuma
常驻内存会不会影响使用速度,帮写个我来测试看看
2022-09-07 20:21
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
收藏
得分:0 
百度上复制粘贴过来的,参考一下

他是查找数组的值,非遍历递归方法。

程序代码:
有序数的快速查找方法(非递归法)
Private Sub Command1_Click()
Dim dd(27) As Long
Dim aa As Long
Dim v As Long
dd(0) = 75
dd(1) = 80
dd(2) = 85
dd(3) = 90
dd(4) = 95
dd(5) = 100
dd(6) = 106
dd(7) = 112
dd(8) = 118
dd(9) = 125
dd(10) = 132
dd(11) = 140
dd(12) = 150
dd(13) = 160
dd(14) = 180
dd(15) = 200
dd(16) = 224
dd(17) = 250
dd(18) = 280
dd(19) = 315
dd(20) = 355
dd(21) = 400
dd(22) = 450
dd(23) = 500
dd(24) = 560
dd(25) = 630
dd(26) = 710
dd(27) = 800
aa = 280 '要查找的数字
v = NumFind(dd, aa) '调用查找函数
If v = -1 Then
MsgBox "没发现要查找的数据", vbExclamation, "提示"
Else
MsgBox "当前要查找的:" & aa & " 值在dd数组的第:" & v & " 个元素。", vbInformation, "信息"
End If
End Sub
Public Function NumFind(ByRef Myarray, FNumber As Variant) As Long
Dim K As Long, I As Long
Dim L1 As Long, R1 As Long
Dim l As Long, R As Long
l = LBound(Myarray): R = UBound(Myarray)
NextLoop:
K = (l + R) Mod 2
If K = 1 Then '中点
I = (l + R + 1) \ 2
Else
I = (l + R) \ 2
End If
If Myarray(I) <> FNumber Then
If Myarray(I) > FNumber Then
L1 = l: R1 = I
Else
L1 = I: R1 = R
End If
If (R1 - L1) = 1 Then '第一个和最后一个
If Myarray(L1) = FNumber Then
NumFind = L1
ElseIf Myarray(R1) = FNumber Then
NumFind = R1
Else
NumFind = -1 '没有发现
End If
Else
l = L1: R = R1
GoTo NextLoop
End If
Else
NumFind = I
End If
End Function

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-07 20:35
kings12333
Rank: 2
等 级:论坛游民
帖 子:114
专家分:66
注 册:2012-11-29
收藏
得分:0 
回复 9楼 yuma
那怎么把这个文件的4000+行放入到数组呢?
2022-09-07 20:45
快速回复:如何查询字典中的值?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056035 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved