吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 624|回复: 5
上一主题 下一主题
收起左侧

[易语言 原创] 给易语言开发一个简单的字典(基于二分查找数组实现)

[复制链接]
跳转到指定楼层
楼主
xxmdmst 发表于 2024-4-16 15:31 回帖奖励
本帖最后由 xxmdmst 于 2024-4-16 15:33 编辑

一般的字典基于hash表实现,有着O(1)的查找效率,但实现起来比较麻烦。
但是易语言的原生库,连伪字典都没有,编程肯定是有键值对数据的存储需求的,所以我基于二次查找实现了一个简单的文本字典,有O(log N)的查找效率。
有需要的可以编译为易模块给自己调用。有兴趣也可以增强功能,到可以支持其他数据类型。

核心代码如下:
.版本 2

.程序集 字典, , 公开
.程序集变量 arr, Entry, , "0"
.程序集变量 left, 整数型
.程序集变量 right, 整数型
.程序集变量 mid, 整数型
.程序集变量 mid_val, 文本型

.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用

.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用

清除数组 (arr)

.子程序 get, 文本型, 公开
.参数 k, 文本型

left = 1
right = 取数组成员数 (arr)
mid = 1
.判断循环首 (left ≤ right)
    mid = 到整数 ((left + right) ÷ 2)
    mid_val = arr [mid].k
    .判断开始 (mid_val = k)
        返回 (arr [mid].v)
    .判断 (mid_val < k)
        left = mid + 1
    .默认
        right = mid - 1
    .判断结束

.判断循环尾 ()
返回 (“”)

.子程序 put, 逻辑型, 公开
.参数 k, 文本型
.参数 v, 文本型, 参考 可空
.局部变量 e, Entry

left = 1
right = 取数组成员数 (arr)
mid = 1
.判断循环首 (left ≤ right)
    mid = 到整数 ((left + right) ÷ 2)
    mid_val = arr [mid].k
    .判断开始 (mid_val = k)
        .如果真 (是否为空 (v) = 假)
            arr [mid].v = v
        .如果真结束
        返回 (真)
    .判断 (mid_val < k)
        left = mid + 1
    .默认
        right = mid - 1
    .判断结束

.判断循环尾 ()

.如果真 (是否为空 (v) = 假)
    e.k = k
    e.v = v
    插入成员 (arr, left, e)
.如果真结束
返回 (假)

.子程序 是否存在, 逻辑型, 公开
.参数 k, 文本型

返回 (put (k))

.子程序 clear, , 公开

清除数组 (arr)

.子程序 length, 整数型, 公开

返回 (取数组成员数 (arr))

.子程序 遍历成员, 文本型, 公开
.参数 max, 整数型, 可空, 需要打印的最大成员数,默认100
.局部变量 i, 整数型
.局部变量 结果, 文本型

.如果真 (是否为空 (max))
    max = 100
.如果真结束
结果 = “{”
.计次循环首 (取数组成员数 (arr), i)
    .如果真 (i > 1)
        结果 = 结果 + “,”
    .如果真结束
    结果 = 结果 + arr [i].k + “:” + arr [i].v
    .如果真 (i ≥ max)
        跳出循环 ()
    .如果真结束

.计次循环尾 ()
返回 (结果 + “}”)



代码和模块下载地址:
链接:https://pan.baidu.com/s/1G0hiYAgqpWgWAw56rfudyA?pwd=52pj
提取码:52pj
--来自百度网盘超级会员V7的分享

免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hedun + 1 + 1 用心讨论,共获提升!
anA10 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
JuncoJet 发表于 2024-4-16 15:48
易语言没有字典?VB6有
3#
anA10 发表于 2024-4-16 17:28
4#
codinary 发表于 2024-4-16 20:38
5#
hjhboy 发表于 2024-4-18 02:48
这个可以有  感谢分享   回复支持下
6#
mytomsummer 发表于 2024-4-18 10:07
感谢分享支持一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-30 09:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表