use*_*240 6 higher-order-functions swift swift4
我有一个具有 id 的条目列表,我想将它们过滤到具有与 selectedIDs 中的 ID 之一匹配的 Entry.id 的条目。有没有办法用过滤器来做到这一点,或者我必须使用 for 循环?
struct Entry {
let id: String
}
var allEntries = [Entry]()
var selectedIDs = [String]
Run Code Online (Sandbox Code Playgroud)
例如
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")]
Run Code Online (Sandbox Code Playgroud)
Rakesha Shastri 的回答没有任何问题。出于性能原因,您可能需要使用selectedIDsaSet而不是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) })
Run Code Online (Sandbox Code Playgroud)
原因是搜索 an 的Array计算复杂度为O(n)wheren是数组的长度,而搜索 a Set(即哈希表)的计算复杂度O(1) 平均为。
如果保留selectedIDs为数组,则整体解决方案的复杂度为O(n * m)其中n和分别是和m的长度。selectedIDsallEntries
如果使用Set,总体复杂性会降低到O(m)。
话虽如此,你的例子对于任何一种方法来说都太微不足道了,无法产生影响。
| 归档时间: |
|
| 查看次数: |
5855 次 |
| 最近记录: |