精易论坛

标题: 如何高效的清除无效的文本数组数据 [打印本页]

作者: 阿素里戈沃里嘚    时间: 2025-3-23 14:07
标题: 如何高效的清除无效的文本数组数据
我有一个100万个索引的文本型数组,里面有很多空文本的数据;
有没有什么高效的方法删除掉那些空数据;
遍历删除的话太慢了...

作者: 算法艺术家    时间: 2025-3-23 14:07
阿素里戈沃里嘚 发表于 2025-3-23 15:54
* “开始遍历删除”
* “遍历删除耗时:” | 10375.000000 | “剩余成员数:” | 500003
* “开始哈希表 ...

都是遍历 只不过这个方法是把非空重新添加进去
作者: 萧楚楠    时间: 2025-3-23 14:26
必须遍历才知道是否空文本,你可以用多线程+汇编来清除

补充内容 (2025-3-23 14:27):
也可以试试哈希表和节点
作者: 萧楚楠    时间: 2025-3-23 14:29
https://125.confly.eu.org/forum.php?mod ... B%E9%87%8D%E5%A4%8D试试这个
作者: 算法艺术家    时间: 2025-3-23 14:52
用哈希表快
作者: 算法艺术家    时间: 2025-3-23 15:04
  
文本数组 = { “123”, “bbb”, “”, “123”, “”, “aaa”, “123”, “aaa” }
数组去重复 (文本数组, )
调试输出 (文本数组)
' 数组:3{“123”,“bbb”,“aaa”}
子程序名返回值类型公开备 注
数组去重复 (哈希表版) 删除数组中的重复值和空值
参数名类 型参考可空数组备 注
文本数组文本型
保持原来数组顺序不变逻辑型真保持数组顺序不变,假打乱顺序
变量名类 型静态数组备 注
局哈希哈希表_ASM 
i整数型 
局哈希.创建 ( #文本型, #整数型, 20, , , , 保持原来数组顺序不变)  ' 2的20次方除以1024 ' 1MB容量
计次循环首 (取数组成员数 (文本数组), i)
局哈希.添加 (文本数组 [i], 0)
计次循环尾 ()
局哈希.取所有键 (文本数组)
局哈希.清空 ()



补充内容 (2025-3-23 15:05):
模块是论坛里开源的
125.confly.eu.org/forum.php?mod=viewthread&tid=14516715&highlight
作者: 算法艺术家    时间: 2025-3-23 15:13
  
这个是不去除重复 只去除空值,
文本数组 = { “123”, “bbb”, “”, “123”, “”, “aaa”, “123”, “aaa” }
数组去空值 (文本数组, )
调试输出 (文本数组)
' 数组:6{“123”,“bbb”,“123”,“aaa”,“123”,“aaa”}
子程序名返回值类型公开备 注
数组去空值 (哈希表版) 删除数组中的空值
参数名类 型参考可空数组备 注
文本数组文本型
保持原来数组顺序不变逻辑型真保持数组顺序不变,假打乱顺序
变量名类 型静态数组备 注
局哈希哈希表_ASM 
i整数型 
局哈希.创建 ( #整数型, #文本型, 20, , , , 保持原来数组顺序不变)  ' 2的20次方除以1024 ' 1MB容量
计次循环首 (取数组成员数 (文本数组), i)
如果真 (文本数组 [i]“”)
局哈希.添加 (i, 文本数组 [i])

计次循环尾 ()
局哈希.取所有值 (文本数组)
局哈希.清空 ()


i支持库列表   支持库注释   
spec特殊功能支持库


作者: 阿素里戈沃里嘚    时间: 2025-3-23 15:53
算法艺术家 发表于 2025-3-23 15:13
  
这个是不去除重复 只去除空值,
[/quote]
你这还不如遍历呢{:7_439:}
* “开始遍历删除”
* “遍历删除耗时:” | 10375.000000 | “剩余成员数:” | 500003
* “开始哈希表处理”
* “遍历删除耗时:” | 33625.000000 | “剩余成员数:” | 500003
[e=0].版本 2
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
arr文本型0
arr2文本型0
i整数型 
重定义数组 (arr, 真, 1000000)
置随机数种子 ()
计次循环首 (取数组成员数 (arr), i)
arr [i]选择 (取随机数 (0, 1) = 0, “”, 到文本 (i))
计次循环尾 ()
复制数组 (arr2, arr)
调试输出 (“开始遍历删除”)
子程序1 (arr)
调试输出 (“开始哈希表处理”)
数组去空值 (arr2, )
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
子程序1  
参数名类 型参考可空数组备 注
arr文本型
变量名类 型静态数组备 注
i整数型 
t整数型 
t = 取启动时间 ()
变量循环首 (取数组成员数 (arr), 1, -1, i)
如果真 (arr [i]“”)
删除成员 (arr, i, 1)

变量循环尾 ()
调试输出 (“遍历删除耗时:”, 取启动时间 () - t, “剩余成员数:”, 取数组成员数 (arr))
子程序名返回值类型公开备 注
数组去空值 (哈希表版) 删除数组中的空值
参数名类 型参考可空数组备 注
文本数组文本型
保持原来数组顺序不变逻辑型真保持数组顺序不变,假打乱顺序
变量名类 型静态数组备 注
局哈希哈希表_ASM 
i整数型 
t整数型 
t = 取启动时间 ()
局哈希.创建 ( #整数型, #文本型, 20, , , , 保持原来数组顺序不变)  ' 2的20次方除以1024 ' 1MB容量
计次循环首 (取数组成员数 (文本数组), i)
如果真 (文本数组 [i]“”)
局哈希.添加 (i, 文本数组 [i])

计次循环尾 ()
局哈希.取所有值 (文本数组)
局哈希.清空 ()
调试输出 (“遍历删除耗时:”, 取启动时间 () - t, “剩余成员数:”, 取数组成员数 (文本数组))


i支持库列表   支持库注释   
spec特殊功能支持库


作者: 阿素里戈沃里嘚    时间: 2025-3-23 15:54
算法艺术家 发表于 2025-3-23 15:13
[e=3]这个是不去除重复 只去除空值,
.版本 2
.支持库 spec

* “开始遍历删除”
* “遍历删除耗时:” | 10375.000000 | “剩余成员数:” | 500003
* “开始哈希表处理”
* “遍历删除耗时:” | 33625.000000 | “剩余成员数:” | 500003


你这还不如遍历快呢
作者: 算法艺术家    时间: 2025-3-23 17:48
阿素里戈沃里嘚 发表于 2025-3-23 15:54
* “开始遍历删除”
* “遍历删除耗时:” | 10375.000000 | “剩余成员数:” | 500003
* “开始哈希表 ...

空值少的话  还是直接删除成员快
作者: 算法艺术家    时间: 2025-3-23 17:55
阿素里戈沃里嘚 发表于 2025-3-23 15:54
* “开始遍历删除”
* “遍历删除耗时:” | 10375.000000 | “剩余成员数:” | 500003
* “开始哈希表 ...

没啥好办法了  只能用这个了 应该能快一些
125.confly.eu.org/forum.php?mod=viewthread&tid=14829819&highlight




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4