在 2 个阵列之间匹配数据的最快方法

Fastest way to match data between 2 arrays

提问人:Paul Queen Soft 提问时间:6/5/2023 最后编辑:user4157124Paul Queen Soft 更新时间:6/24/2023 访问量:128

问:

我有 2 个数组:

  • $r01有 8,000 行(iMDB ID 的单列列表)。
  • $info01有 44,000 行(完整的电影详细信息,包括 iMDB ID)。

我需要从第一个数组中查找第二个数组中的所有记录。我正在使用 2 个循环:For

For $i = 0 to UBound($r01)-1 ; first array
   For $j = 0 to UBound($info01)-1 ; second array
      if StringInStr($info01[$j], 'tt' & $r01[$i])>0 Then  ; search ID - I will add 'tt' to original array, to shave off a few seconds of processing
           _ArrayAdd($found, $all[$j] & @TAB & $r01[$i])   ; add match to $found array
           exitloop     ; exit loop, I do not need duplicate results (yes, they are possible)
      endif
   Next
Next

处理(i7 7700k,16Gb RAM)需要数小时。

数组 解析 搜索 匹配 autoit

评论

1赞 Stephan 6/6/2023
你碰巧把数组作为文件吗? 命令应该尽可能快地得到它。虽然它也会列出重复项(应该能够解决)。(试试吧,哪怕只是为了对可能的速度有参考)cmdfindstr /G:r01.csv info01.csv > found.csv_ArrayUnique
0赞 Paul Queen Soft 6/6/2023
第一个数组是 file。第二个数组是多个文件:40.000 个文件,分为 14 个文件夹和许多子文件夹。我不确定它对我有很大帮助。
0赞 Stephan 6/6/2023
findstr /S /G:r01.csv info*.csv > found.csv或?
0赞 Paul Queen Soft 6/6/2023
哈哈,天哪cr_p!h_ll怎么这么快?!在大约 2 分钟内完成处理(使用 HDD,我会将它们复制到 SSD 进行快速测试)。我只需要将“tt”添加到 ID 列表(第一个数组/文件)并解析输出即可。
0赞 Paul Queen Soft 6/6/2023
这好得令人难以置信。它适用于一个文件夹(大约 3500 个文件/第二个数组)。但是当我使用所有文件(44000 条记录)运行 = FINDSTR:内存不足 - 错误 afetr 1-2 秒 / 大约 10-11 个结果。也许我可以用一个ID运行。 哈哈,不,同样的错误:findstr /L /S tt11219014 “d:\folder\info.txt”

答: 暂无答案