Словарь нескольких ключей для того же значения "и более" - PullRequest
0 голосов
/ 20 марта 2020

Довольно основы c но я надеюсь, что есть ярлык, о котором я не знаю:

У меня есть словарь с 51 парой ключ / значение. Первый ключ - 0, затем 1, и т. Д. c до 50.

Я хочу, чтобы мой последний ключ был "50 или более", поскольку все они будут иметь одинаковое значение. Можете ли вы сделать что-то вроде 50 ... или что-то в этом роде?

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Этого можно добиться, создав собственную структуру, которая оборачивает словарь. Этот код не проверен - и предполагается, что вы хотите хранить строки в словаре. Но это должно быть достаточно легко изменить.

(Обновлено для комментария Александра )

struct CustomDictionary {
   let maxIndex: Int = 50
   var vals: [Int, String]
   subscript(index: Int) -> String {
       get {
            return vals[min(index, maxIndex)]  
       }
       set(newValue) {
            vals[min(index, maxIndex)] = newvalue 
       }
   }
}
1 голос
/ 20 марта 2020

Вы не можете использовать это правило для доступа к словарю. Вы должны использовать точный ключ.

Однако с этим довольно легко справиться. Я предполагаю, что ваш ключ будет числом, скажем, 57 - это пример, который вы хотели бы обработать. Вы можете сами сделать простое правило:

    let number = 57
    let key = number > 50 ? "50+" : String(describing: number)

    dictionary[key] // => will return your number

По сути, вам нужно будет узнать свой ключ, если у вас есть номер. В этом коде предполагается, что вам придется хранить элемент более 50 в ключе "50+", но вы можете использовать все, что захотите, вместо "50+"

С другой стороны, если вы использовали непосредственно целые числа в качестве ключей для вашего словаря, то вы можете хранить по ключу 51, и приведенный выше код преобразуется в

    let number = 57
    let key = number > 50 ? 51 : number

    dictionary[key] // => will return your number

, но в этом случае я предлагаю использовать массивы в качестве словаря с целочисленными ключами, которые также непрерывный (например, все целые числа в диапазоне 1-51) - это то же самое, что и массив, и фактически вы можете использовать ту же идею, что и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...