/ / NSDictionary - използвайте нулев ключ или нулева стойност? - plist, nsdictionary, nspredicate

NSDictionary - използвайте нулев ключ или нулева стойност? - plist, nsdictionary, nspredicate

Използвам масив от NSDictionaries да съхранявате няколко бейзболни отбора, всеки с "име"ключ. Когато потребителят реши, че се интересува от получаване на актуализации на резултатите за конкретен екип, аз събирам коя иннизация на сигнала трябва да бъде изпратена. Искам да запазя този номер за избрания екип.

Виждам две опции и не съм сигурен кой е по-добър:

  1. Всички речници на екипа имат ключ „innings“ и за повечето отбори той е нулев (възможно ли е дори да се съхранява нула за цифров ключ? Може би ще трябва да се използва 0?).
  2. Само отборните речници, където е необходима стойност за подаване, имат клавиша "innings" - за всички останали отборни речници този ключ не присъства.

Вторият вариант ми се струва по-елегантен - ако няма стойност, не съхранявам празен ключ. Това вярно ли е?

Бонус точки: как да използвам предикат, за да изтегля всички от екипните речници, които имат / нямат този ключ? Най-добрите ми усилия са

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(Innings != nil)"];

но мисля, че това очаква да се намери ключ на „Иннингс“ във всеки речник и да се търси нулева стойност.

Отговори:

1 за отговор № 1

Речник в Какао не може да съдържа nil стойности, така че в този случай или трябва да го оставите невъзстановен, или да използвате стойност на заместител за случая, в който иначе ще използвате nil.

Ако знаете всички полета, които искате да направитеопределете за вашия речник, тогава може да искате да помислите за определяне на персонализиран клас с декларирани свойства, които да ги държат. В този случай няма проблем да зададете свойство на нула и всичко е по-изрично дефинирано. Коментарите във вашия код също ще помогнат на бъдещите програмисти да разберат какво сте мислили, когато пишете кода. Речниците не правят това много добре.

Вашият предикат е добре както е, но можете да пропуснете скобите.