我正在看一堆名字,我想记录所有的名字。我的计划是遍历名称数组,并使用字典来跟踪每个名称,因此我可以在O(1)时间内查找字典中的名称,看看它是否存在。
Swift中可用的最佳数据结构是什么? (我很想学习最适合这种情况的通用数据结构的名称,即使它不在Swift中。)
Dictionary
对象可以正常运行,但是当我真的只需要密钥时,它需要一个键值。
答案 0 :(得分:1)
您正在寻找 Set (无序的唯一对象的集合 - 但有些实现是有序的。)
Swift和ObjectiveC有NSSet,这对你有用吗?
答案 1 :(得分:0)
Swift不提供集合类型。您可以参考this blog post了解如何定义Set。
此处转载的代码供快速参考:
struct Set<T: Hashable> {
typealias Element = T
private var contents: [Element: Bool]
init() {
self.contents = [Element: Bool]()
}
/// The number of elements in the Set.
var count: Int { return contents.count }
/// Returns `true` if the Set is empty.
var isEmpty: Bool { return contents.isEmpty }
/// The elements of the Set as an array.
var elements: [Element] { return Array(self.contents.keys) }
/// Returns `true` if the Set contains `element`.
func contains(element: Element) -> Bool {
return contents[element] ?? false
}
/// Add `newElements` to the Set.
mutating func add(newElements: Element...) {
newElements.map { self.contents[$0] = true }
}
/// Remove `element` from the Set.
mutating func remove(element: Element) -> Element? {
return contents.removeValueForKey(element) != nil ? element : nil
}
}
否则,您可以使用Dictionary并将名称用作键和值。