Как определить, существует ли Ключ в случае игнорирования NSMutableDictionary - PullRequest
0 голосов
/ 13 сентября 2011

Мне нужно определить, является ли ключ новой пары ключ-значение уникальным, прежде чем добавлять его в NSMutableDictionary. Как я могу сделать это с учетом регистра? Например, новый ключ с именем «мой ключ» не должен проверяться, если в словаре существует «мой ключ», «мой ключ» или «мой ключ» и т. Д.

Я пытался ([myDictionary objectForKey: @ "мой ключ"] == nil), а также ([[[myDictionary allKeys] containsObject: @ "мой ключ"]) оба из них чувствительны к регистру.

Спасибо

John

Ответы [ 3 ]

4 голосов
/ 14 сентября 2011

Лучшее решение - , а не хранить чувствительные к регистру ключи в вашем словаре.Любой вид поиска будет очень медленным.

Т.е. [myDict setObject: foo forKey: [aKey lowercaseString]];

Предполагается, что в словаре нет необходимости различать My Key и MY KEY.Если это произойдет, вам все же лучше использовать вышеизложенное и использовать коллекцию в качестве значения, которое дополнительно дифференцирует указанный ключ, по мере необходимости (хотя это может вызвать у меня вопрос, является ли структура данных действительно оптимальной).

1 голос
/ 14 сентября 2011

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

Если фактический регистр строки имеет значение, то используйте строчную строку в качестве ключа и сохраните ее как часть значения, скажем (нотация словаря Python / JSON):

{
    "my key": 
    {
        "original":"My KeY",
        "content":"Original content"
    },
    "other key":
    {
        "original":"OthEr KeY",
        "content":"Original content"
    }
}
1 голос
/ 14 сентября 2011

Вот что я хотел бы сделать, поскольку NSDictionary не поддерживает поиск ключа без учета регистра.

  1. Используйте метод allKeys NSDictionary для извлечения массива ключей из словаря.
  2. Использование NSP-предиката с поиском без учета регистра для фильтрации массива ключей.
  3. Используйте полученный массив ключей (их может быть несколько) для извлечения объектов-значений из словаря.
...