aardio二维数组去除重复项的方法探讨

形如{ {1,2},{3,5},{4,2},{1,2},......}这样的数组,如何快速去除重复项?今天群友讨论很热烈,其中我能看懂的方案有下面两种:

第一种方案:将嵌套数组转换为字符串,去除重复,再转换为表。

第二种方案:将数组导入内存数据库,查询不重复值,导出为表。

下面是测试代码:

import console;

console.log("构建一个二维数组。第1维40000个元素,第2维2个元素,是0-99的随机整数。。。")
var tab={}
for (i=1;40000){
	table.push(tab,{math.random(0,99),math.random(0,99)	})
}
console.log("数组构建完毕!")

console.log("第一种方法:将嵌套数组转换为字符串,去除重复,再转换为表。。。")
var tick=time.tick()
var tab1=table.map(tab,λ(v) table.tostring(v) )
var tab2=table.unique(tab1)
var tab3=table.map(tab2,λ(v) eval(v) )
console.log("第一种方法去重完毕!用时"++(time.tick()-tick)++"ms,得到"++#tab3++"个不重复元素。")
//console.dump(tab3)

console.log("第二种方法:将数组导入内存数据库,查询不重复值,导出为表。。。")
import sqlite
var tick=time.tick()
var db=sqlite(":memory:")
db.exec("CREATE TABLE test( fa INTEGER,  fb INTEGER	);")
for (i=1;40000) db.exec("INSERT INTO test VALUES (?,?)",tab[i])//不知道有没有更快的导入方式?
var tab4=db.getTable("SELECT distinct * FROM test ")
console.log("第二种方法去重完毕!用时"++(time.tick()-tick)++"ms,得到"++#tab4++"个不重复元素。")
//console.dump(tab4)

console.pause(true);

 测试结果是:

第一种方法用时312ms,得到9808个不重复元素。
第二种方法用时843ms,得到9808个不重复元素。
两种方法结果一致,代表都是可行的。第一种方法快一些,但第二种方法通用一些。

我对数据库不是很熟悉,第二种方法可能还能加速,欢迎讨论。

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值