obsidian-notes/代码/去重.md
CSSC-WORK\murmur 3e6078442b init version
2024-04-15 11:19:57 +08:00

1.5 KiB
Raw Permalink Blame History

title updated created tags
去重 2022-03-14 07:45:25Z 2022-01-10 03:35:59Z
aad
aardio
代码块
数据筛选

补充

table.unique(__) 可实现数组去重,算法复杂度未知

table.unique(__) 
对参数 @1 指定的数组去重
返回去重后的新数组
不修改原来的数组

背景

从ADI官网爬取手册时遇到一个问题。同一器件具有多个子型号的情况非常普遍子型号间的参数虽然不仅相同但共享同一数据手册。

这就需要在合成下载链接前对这些器件名称进行去重处理,以免产生大量重复下载。

分析

经分析此需求与“QQ号码去重问题”性质类似可采用同一算法实现。 算法思想是利用数组的bit位保存数据中待处理的项bit位对应的值0/1表示是否重复。

代码

本例采用aardio实现表的键名对应待去重项对应的键值代表重复次数。显示核心代码如下

import console; 
var str = {"ad832";"ad830";"ad832"}//包含重复项的数据
var devlst = {}

for(k,v in str){
	devlst[v] = devlst[v]==null?1:devlst[v]+1; //稀疏数组
}

console.varDump(devlst)

for(k,v in devlst){
	string.save("d:\tmp.txt", k ++ " " ++ v ++ '\r\n',true)//保存器件唯一名及重复次数
}

console.pause(true);

运行后结果如下:

参数位置:1
数据类型:table
变量值: {
    ad830 = 1
    ad832 = 2
}

请按任意键继续 ...

#aardio #代码块 #数据筛选