gpt4 book ai didi

swift - 获取2个数组中公共(public)元素列表的性能

转载 作者:行者123 更新时间:2023-11-30 11:19:18 24 4
gpt4 key购买 nike

我有两个自定义对象数组,其中包含 id 和 sum。像这样:

let oldStakes = [Stake(id: 1, sum: 100), Stake(id: 2, sum: 120)]
let newStakes = [Stake(id: 5, sum: 600), Stake(id: 1, sum: 432)]

我需要获取两个具有相同 id 的对象数组。如果我这样做:

    newStakes = newStakes.filter{stake in oldStakes.contains{$0.id == stake.id}}.sorted{$0.id ?? 0 < $1.id ?? 0}
oldStakes = oldStakes.filter{stake in oldStakes.contains{$0.id == stake.id}}.sorted{$0.id ?? 0 < $1.id ?? 0}

这段代码的执行时间约为2秒。如何减少执行时间?谢谢!

最佳答案

一般来说,在Set中搜索是O(1)操作,并且在大多数情况下速度更快。

var oldStakes = [Stake(id: 1, sum: 100), Stake(id: 2, sum: 120)]
var newStakes = [Stake(id: 5, sum: 600), Stake(id: 1, sum: 432)]
let oldIds = Set(oldStakes.lazy.map{$0.id ?? 0})
let newIds = Set(newStakes.lazy.map{$0.id ?? 0})
newStakes = newStakes.filter{oldIds.contains($0.id ?? 0)}.sorted{$0.id ?? 0 < $1.id ?? 0}
oldStakes = oldStakes.filter{newIds.contains($0.id ?? 0)}.sorted{$0.id ?? 0 < $1.id ?? 0}

但我想知道您是否真的需要在您的 Stake 中将 id 设置为可选。

关于swift - 获取2个数组中公共(public)元素列表的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51458473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com