首页 > 解决方案 > 循环遍历 2 个数组并通过扭曲找到差异

问题描述

好的,所以这对我来说有点难以理解,所以我希望你们中的一个人能够提供帮助。一点上下文,这是我写的更新程序,它从 CDN 中获取文件的 xml 列表,然后将其与旧列表进行比较以查找文件差异,以便我知道哪些文件已过时并且需要重新下载。现在我无法找到合适的解决方案。

目前我有 3 个数组。Array1、Array2 和 DiffArray。Array1 存储来自 CDN 的 xml 条目..即主 Array2 存储我们当前拥有的旧条目..即从属 Array3 存储两者之间更改的差异。

这是每个数组中的信息示例。请注意,每个新行都被解析为其对应数组的单独索引

阵列1:

cbt/ar/816.mp3
2019-06-05T16:40:33.212Z
cbt/ar/817.mp3
2019-06-05T16:40:31.509Z
cbt/ar/818.mp3
2019-04-05T16:40:30.978Z
cbt/ar/819.mp3
2019-04-05T16:40:29.807Z

数组2:

cbt/ar/816.mp3
2019-04-05T16:40:33.212Z
cbt/ar/817.mp3
2019-04-05T16:40:31.509Z
cbt/ar/818.mp3
2019-04-05T16:40:30.978Z
cbt/ar/819.mp3
2019-04-05T16:40:29.807Z

有几点需要注意: 1.) 这是一个文件名列表,以及它的最后修改日期 2.) 如您所见,array1 有一个 816.mp3 和 817.mp3 的新文件

我们的想法是查看,注意哪些文件不同,然后使用更新的版本重新下载这些文件。

这是我目前拥有的,但正如您所见,它不是适合这项工作的解决方案:

var a = [];
      for (var x = 0; x < remoteArray.length; x++) {
        a[remoteArray[x]] = true;

      }

      for (var y = 0; y < localArray.length; y++) {
        if (a[localArray[y]]) {
          delete a[localArray[y]];
        } else {
          a[localArray[y]] = true;
        }
      }

      for (var z in a) {
        diffArray.push(z);
        log.info("::DIFFERENCES::" + z);
      }
    }

此当前代码仅输出实际的文字差异,并不能真正帮助我知道哪个文件不同,以便我可以更新它

标签: javascriptarraysloops

解决方案


不确定这是否是您想要的结果格式,但它确定了哪些文件需要更新:

# Make a dictionary matching each cdn file to its timestamp
cdn = {}
for i in range(0,len(Array1),2):
    cdn[Array1[i]] = Array1[i+1]

# Make an array of files needing to be updated
update = []
for i in range(0,len(Array2),2):
    path = Array2[i]
    # If file is in CDN and the one there is newer, add it to update
    if path in cdn and cdn[path] > Array2[i+1]:
        update.append( path )

推荐阅读