【问题标题】:Is there a way to efficiently check two huge arrays for matching elements [duplicate]有没有办法有效地检查两个巨大的数组是否匹配元素[重复]
【发布时间】:2020-10-17 18:37:50
【问题描述】:

我有 2 500,000 个计数字符串数组。有没有更有效的方法来检查它们是否有匹配的元素:

let array1 = ["a", "b", "c", "d", "e"]
let array2 = ["d", "e", "f", "g", "h"]

var maching = [0]

for element1 in array1 {
    for element2 in array2 {
        if element1 == element1 {
            maching.append(element1)
        }
    }
}

提前致谢

【问题讨论】:

  • 数组是否会像您的示例中那样排序?
  • 另外,两个数组中是否会有重复项?如果是这样,您是否只想要独特的匹配元素?
  • 对不起,我应该澄清一下,它们是字符串数组,而且很可能重复。
  • @Zackattack08 副本对您来说重要吗?你想要重复的多个匹配项吗?顺序重要吗?
  • 不,我不在乎重复。

标签: arrays swift


【解决方案1】:

如果元素是Hashable(字符串是)并且我们可以忽略重复和排序,那么使用Set 是最简单的解决方案:

let matching = Set(array1).intersection(Set(array2))

根据数据的性质,我们可以提供更好的解决方案,例如区间树。我们掌握的信息越多,就能设计出更好的解决方案。但是,特定于一个用例的最佳解决方案会复杂得多。

【讨论】:

  • 它们是字符串数组,我应该澄清一下。
  • 那么这个解决方案就可以了。如果我们对数字数组进行排序,那就更简单了。
  • 谢谢,它确实可以满足我的需要
  • 如果你只是在寻找交叉点,那么创建两个集合有点低效。一套就够了。
  • 你可以将任何集合传递给交集方法,只要它的元素等于集合元素。 Set(array1).intersection(array2)
猜你喜欢
  • 1970-01-01
  • 2011-04-08
  • 2020-03-05
  • 2016-10-10
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 2011-09-01
相关资源
最近更新 更多