如果我只是想确定一个值,我应该使用哪个Swift数据结构?

时间:2014-08-22 04:56:22

标签: dictionary data-structures language-agnostic swift

我正在看一堆名字,我想记录所有的名字。我的计划是遍历名称数组,并使用字典来跟踪每个名称,因此我可以在O(1)时间内查找字典中的名称,看看它是否存在。

Swift中可用的最佳数据结构是什么? (我很想学习最适合这种情况的通用数据结构的名称,即使它不在Swift中。)

Dictionary对象可以正常运行,但是当我真的只需要密钥时,它需要一个键值。

2 个答案:

答案 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并将名称用作键和值。