吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1795|回复: 9
收起左侧

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

[复制链接]
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的分享

免费评分

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

查看全部评分

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

JuncoJet 发表于 2024-4-16 15:48
易语言没有字典?VB6有
codinary 发表于 2024-4-16 20:38
hjhboy 发表于 2024-4-18 02:48
mytomsummer 发表于 2024-4-18 10:07
感谢分享支持一下
hjhboy 发表于 2024-6-27 00:28
不错  感谢分享  很好的学习资料   收下了
llc_cn 发表于 2024-8-30 16:32
不错,只是为啥非要弄几个英文字母命令?
 楼主| xxmdmst 发表于 2024-9-2 08:44
llc_cn 发表于 2024-8-30 16:32
不错,只是为啥非要弄几个英文字母命令?

你习惯中文,可以自己改成中文。。。
不过我能理解你这个问题,初中我玩易语言的时候跟你一样,也不懂别人的源码为啥都要用英文。
但是我已经至少10年没用过易语言了,这些年玩的都是Python,go,Rust,Java,Scala,nodejs,perl,lua,.net,C++,PHP
习惯早已养成变量名都用英文,开发一个类也是仿造其他编程语言的接口,自然函数名尽量保持一致。

你会产生这种问题,说明你只习惯用中文编程,没有被其他语言强制用英文影响过。正常先学过其他语言的,大概率都是懒得用易语言的。我只不过是初中本身2天内学会过易语言,所以能够重新尝试使用易语言而已。
llc_cn 发表于 2024-9-2 09:14
本帖最后由 llc_cn 于 2024-9-2 09:21 编辑

嗯,很有道理啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-15 20:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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