Ограничить размер словаря в Swift - PullRequest
0 голосов
/ 07 октября 2018

У меня есть словарь, подобный этому:

static var answer = [String: String]()

Как я могу ограничить количество элементов определенным числом?

1 Ответ

0 голосов
/ 07 октября 2018

Это простой способ:

var answer = [String: String]()
let limit = 3

func addToDictionary(key: String, value: String) {
    let keys = answer.keys
    if keys.count < limit || keys.contains(key) {
        answer[key] = value
    }
}

addToDictionary(key: "uno", value: "one")
addToDictionary(key: "dos", value: "two")
addToDictionary(key: "tres", value: "three")
addToDictionary(key: "quatro", value: "four")
addToDictionary(key: "tres", value: "trois")

print(answer) //["uno": "one", "tres": "trois", "dos": "two"]

Это не помешает добавлению непосредственно в словарь через answer["cinco"] = "five".Правильным способом было бы создать структуру, которая имеет свойство limit.Вот пример реализации:

struct LimitedDictionary<T: Hashable, U> {
    private let limit: UInt
    private var dictionary = [T: U]()

    init(limit: UInt) {
        self.limit = limit
    }

    subscript(key: T) -> U? {
        get {
            return dictionary[key]
        }
        set {
            let keys = dictionary.keys
            if keys.count < limit || keys.contains(key) {
                dictionary[key] = newValue
            }
        }
    }

    func getDictionary() -> [T: U] {
        return dictionary
    }
}

Использование

var dict = LimitedDictionary<String, String>(limit: 3)

dict["uno"] = "one"
dict["dos"] = "two"
dict["tres"] = "three"
dict["quatro"] = "four"
dict["tres"] = "trois"

dict["uno"]          //"one"
dict.getDictionary() //["dos": "two", "tres": "trois", "uno": "one"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...