我在平面文件中有50,000个ID的列表,需要删除任何重复的ID。我的问题是否有任何有效/推荐的算法?
感谢。
答案 0 :(得分:5)
您可以使用命令行sort
程序来订购和过滤ID列表。这是一个非常有效的计划,也可以很好地扩展。
sort -u ids.txt > filteredIds.txt
答案 1 :(得分:3)
逐行读入字典,丢弃重复项。全部读完后,写出新文件。
答案 2 :(得分:2)
我曾经做过一次实验,而我在PHP中可以获得的最快解决方案是对项目进行排序并手动删除所有重复的项目。
如果性能对您来说不是那么大(我怀疑,50,000不是那么多),那么你可以使用array_unique()
:http://php.net/array_unique
答案 3 :(得分:0)
我想如果你有足够大的内存容量,你可以把所有这些id放在数组
中$array[$id] = $id;
这会自动清除欺骗行为。
答案 4 :(得分:0)
你可以这样做:
file_put_contents($file,implode("\n",array_unique(file($file)));
它如何运作?
file
读取文件
返回一个数组。array_unique
file_put_contents
此解决方案假设您在平面文件中每行有一个ID。
答案 5 :(得分:0)
如果您可以使用终端(或本机unix执行),最简单的方法:(假设文件中没有其他内容):
sort < ids.txt | uniq > filteredIds.txt
答案 6 :(得分:0)
你可以通过array / array_unique来做,在这个例子中我猜你的id是由行制动分开的,如果不是这样就改变了它
$file = file_get_contents('/path/to/file.txt');
$array = explode("\n",$file);
$array = array_unique($array);
$file = implode("\n",$array);
file_put_contents('/path/to/file.txt',$file);
答案 7 :(得分:0)
如果你只是在逗号(或任何分隔符)上爆炸文件的内容,那么array_unique将产生最少(和最干净)的代码,否则如果你正在使用$ array [$ id]解析文件= $ id是最快,最干净的解决方案。