gpt4 book ai didi

Swift 4 - 用数组过滤数组

转载 作者:搜寻专家 更新时间:2023-10-31 22:01:08 25 4
gpt4 key购买 nike

我有一个条目列表,其中有一个 ID,我想将它们过滤为具有与 selectedIDs 中的一个 ID 匹配的 entry.id 的条目。有没有办法用过滤器来做到这一点,还是我必须使用 for 循环?

struct Entry {
let id: String
}
var allEntries = [Entry]()
var selectedIDs = [String]

例如

allEntries = [Entry(id: "1"), Entry(id:"2"), Entry(id:"3"), Entry(id:"4")]
selectedIDs = ["1", "3"]

// return selectedEntries
var selectedEntries = [Entry(id: "1"), Entry(id: "3")]

最佳答案

Rakesha Shastri 的回答没有任何问题。出于性能原因,您可能希望将 selectedIDs 设为 Set 而不是 Array:

let allEntries = [Entry(id: "1"), Entry(id:"2"), Entry(id:"3"), Entry(id:"4")]
let selectedIDs: Set<String> = ["1", "3"]
let selectedEntries = allEntries.filter({ selectedIDs.contains($0.id) })

原因是搜索Array的计算复杂度为O(n),其中n是数组的长度,而搜索 Set(即哈希表)的时间是 O(1) 平均

  • 如果将 selectedIDs 保留为数组,则整个解决方案的复杂度为 O(n * m) 其中 nm分别是selectedIDsallEntries的长度。

  • 如果使用Set,整体复杂度会降低到O(m)

话虽如此,您的示例对于任何一种方法来说都太微不足道了。

关于Swift 4 - 用数组过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52811195/

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