112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Быстрое обращение к данным многомерных словарей15.06.2013, 11:24. Показов 5143. Ответов 39
Метки нет (Все метки)
предлагаю на рассмотрение следующий метод работы с данными многомерных словарей
рассматриваются словари, чья многомерная структура состоит из словарей и массивов 1) сокращенные методы получения данных из словарей и массивов
2) примеры кода, показывающие удобство использования сокращенных конструкций key-index
состоит из кнопок на которые назначены действия показа данных через NSLog в программе заполняется многомерный словарь состоящий из 4 уровней 1 - словарь 2 - массив 3 - словарь 4 - словарь структура исходный код программы ViewController.h
0
|
15.06.2013, 11:24 | |
Ответы с готовыми решениями:
39
Приложение представляющее организацию многомерных вычислений многомерных массивов Обращение к данным из базы Обращение к данным класса. обращение к данным uiviewcontroller |
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
|||||||||||
15.06.2013, 15:57 | 2 | ||||||||||
Безполезно. Почитайте документацию к LLVM 4.0+(CLang 3.1+). Это уже сделано до Вас.
И сделано лучше и лаконичнее.
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
15.06.2013, 17:06 | 3 |
zulkis прав. А кроме того, стандартные имена лучше описывают что именно этом методы делают. Набирать их не намного дольше (особенно, с использованием code completion), а читать намного проще. Тут было недавно побоище на похожую тему
А вот проверка индекса на корректность - это правильно. Только зря тип поменяли - в NSArray в качестве индекса NSUInteger используется. Если бы ваш метод принимал его, второе условие было бы просто не нужно. Успехов!
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
||||||||||||||||
15.06.2013, 19:12 [ТС] | 4 | |||||||||||||||
очень странно что на всей странице
https://developer.apple.com/li... Array.html нету ни одного примера, использования массива "нормально" через [] скобки, кроме СИ массивов вроде таких
тоже самое тут, как будто все знают "правду" , но молчат *** я провел ряд экспериментов оказывается допускается, не только читать но и присваивать значения 1) массив
все выше указанное тестировалось на iOS 5 симуляторе xCode 4.6 с включенным ARC Добавлено через 3 минуты неужели нет никаких подводных камней? зачем эти громоздкие методы objectForKey: objectAtIndex:, которые, как выяснилось сейчас, безнадежно устарели и стали неудобны в использовании?
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
||||||||||||||||
15.06.2013, 19:25 | 5 | |||||||||||||||
появились литералы, которые могут заменять эти методы вот и все
если память не изменяет, то стали доступны они в Xcode версии 4.5 почитайте про них тут: http://clang.llvm.org/docs/ObjectiveCLiterals.html так же
создание массивов
1
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|||||||||||
15.06.2013, 22:09 [ТС] | 6 | ||||||||||
опираясь на офф документацию можно также добавить что оператор "[key] = value" теперь может быть переопределен и использован в "пользовательских" объектах или наследниках NSArray NSDictionary
Операторы индекса массивов http://clang.llvm.org/docs/Obj... bscripting
http://clang.llvm.org/docs/Obj... bscripting
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
15.06.2013, 23:22 | 7 |
вот уж не думаю, так как опираясь на офф документацию, метод setObject:atIndexedSubscript: не является публичным и, соответсвенно, не может быть переопределен, потому максимум, чего можно добиться – это "value = [key]"
p.s. ну или если все-таки выгнуть свою палку и переопределить его, то ваше приложение дальше вашего компьютера не уйдет
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
||||||||||||||||
16.06.2013, 00:08 [ТС] | 8 | |||||||||||||||
да, все просто упирается в невозможность унаследоваться от NSMutableArray
setObject:atIndexedSubscript: незнаю как у него с видимостью, однако в пользовательских наследниках NSObject оператор [key] = value работает нормально myobject.h
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
16.06.2013, 01:47 | 9 |
и никаких ворнингов?
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
||||||||||||||||
23.07.2013, 22:08 [ТС] | 10 | |||||||||||||||
вернемся к теме.
если скажем класс категория с методами index и key или вовсе литералы могут облегчить сам вызов метода для доступа к элементу. Однако что касается словарей. То метода key в этом случае становится недостаточно. Так как у словарей есть ключи.
Вот тут на помощь и приходят макросы. давайте заставим Xcode подсказывать нам эти самые ключи по первым вводимым буквам Обычно количество ключей в многомерном словаре невелико и может находится в пределах 20-30 пример ключей многомерного словаря реального приложения
на рисунке пример реального кода с автоматической подсказкой для ввода ключа сравнение кода
в остальных случаях достаточно строк @"ключ"
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
23.07.2013, 22:10 | 11 |
Тут на помощь приходят сниппеты (Snippets). Научитесь, наконец, пользоваться средой разработки!
PS. Дальше даже читать не стал.
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
23.07.2013, 22:28 [ТС] | 12 |
http://ru.wikipedia.org/wiki/%... 0%B5%D1%82
судя по вики Добавлено через 10 минут судя по видео, "штука" хорошая, однако для подсказок именно ключей словарям в рамках одного проекта не годится
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
23.07.2013, 22:28 | 13 |
да что вы развели тут с этими макросами, понятное дело, если строка или любое другое значение используется дважды и больше, то лучше вынести его в переменную или метод, дабы избежать копипаста, это же и макаке понятно, зачем расписывать это...??
естественно для начала нужно посмотреть или вообще стоит это выносить в глобальный для файла макрос, т.к. часто это признак пахнущего кода и можно обойтись передачей параметром или еще как-то вообще разводили уже балаган по этому поводу с другим форумчанином и там приводилось достаточно доводов в пользу статических переменных вместо макросов, если без этого аж никак. аналогично они подсвечиваются, только вот разница между ними существует
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
23.07.2013, 22:53 [ТС] | 14 |
довод против СИ констант : макрос имеет цвет отличающийся по цветовой гамме от обычных переменных -> лучше читаемость довод за СИ константы: константы на уровне компилятора работают быстрее так как память уже под нее выделена и передается чисто указатель есть 3-й путь вызов СИ константы через макрос, однако тогда размер кода "инициализации ключей помощи" увеличиться в 2 раза, что неприемлемо, если только не использовать какую нибудь утилиту для автоматизации процесса и не заполнения этого дела вручную Добавлено через 14 минут да просто короче чем буква d_ трудно представить. Никакие синглтоны, объекты с полями не сравнить с быстротой реакции подсказки Xcode на ввод этих 2-3 символов!
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
23.07.2013, 22:57 | 15 |
Когда Бог хочет меня наказать, он лишает кого-то разума
(с) Неизвестный Админ.
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
23.07.2013, 23:35 | 16 |
я вам про Фому, а вы мне про Ерему, говорю же – статические константы, какая разница Си\неСи
какой в ж**у цвет!? это что еще за ересь, меняйте себе цвет в настройках хоть на красный и будете видеть то, что вам надо на другом конце комнаты, если это так важно для написания понятного и грамотного кода... фух, надежда еще не умерла, ноо ... не приймите это лично, но вы что головой ударились или долго не спали? ну зачем изобретать тут велосипеды .... а завтра Xcode умрет и будет, например, AppCode, в котором ваши дефайны "плохо" подсвечиваются, а пете или васе больше sublime по душе да и при чем тут синглтоны... и почему нельзя установить правила наименования статических констант таким же макаром (надеюсь не d_, а что-то потолковей, да и ключи обычно c k начинаются) ? а если еще и подумать а не говнокодить в стиле новичка в php или javascript с глобальными переменными, то авось и надобность пропадет в таком списке макросов на 50 строк так вы получитесь в тройном выигрыше – и подсказки вам выплывают так же красиво и эффектно, и работает быстрее, и никто не проклинает вас за необычайно огромное количество каких-то понятных только вам и понравившихся только вам дефайнов 21 век, ООП ...
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
||||||
24.07.2013, 00:09 [ТС] | 17 | |||||
Пользовательские настройки среды такие как сниппеты и цвет кода не будут работать на соседнем ПК, где например их нет. причем я сам привел доводы против. чисто мой довод в пользу d_ так как это первая буква в #define в самом первом сообщении топика есть Excel скриншот подобных структур Задумаемся на мгновение, что уже тысячи приложений написаны в стиле
у всех них приложение жрет тонны памяти? и ведь препроцессор тоже заменяет макросы на [dictionary objectForKey:@"elementKey"], самый стандартный способ получить объект из словаря! РАЗВЕ ОН НЕПРАВИЛЬНЫЙ?
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
||||||
24.07.2013, 00:24 | 18 | |||||
т.е. такие текстовые редакторы как саблайм не смогут автодополнять длинные слова или AppCode от JetBrains не справится с такой трудоемкой задачей?
слышал бы вас кто-то еще .... надо опираться на граммотность написанного кода и его читаемость а не цвет подсветки в очередной IDE он-то как раз и правильный, ибо зачем выделять глобально макрос для замены какого-то значения, а вот если эта строка повторяется, то стоит задуматься о выделении переменной, если же вызывается она в разных методах, то стоит подумать или можно передать ее параметром или вынести в отдельный метод, например:
плюс такой код легко поддается рефакторингу, он гибкий для изменений и без труда будет покрыт юнит тестами, что не скажешь про ваш макрос, а ведь мы пишем высокоуровневые приложения, пишем их граммотно и правильно, в объектно-ориентированном стиле в 2013 году, когда некоторые программы сами себя пишут, а мы все еще пытаемся впихнуть изжитки далекого С неужели это хуже чем какой-то болтающийся в воздухе макрос, которых будет потом под две сотни и ваш d_ ничем не поможет, а только заставит перелопатить 200 макросов я имел ввиду не k_, а k, так как это общепринятый подход, а d_ я бы на вашем проекте долго искал бы и еще дольше плевался бы на ваше "творчество" макросы годятся для каких-то глобальных для фреймворка или SDK флажков, для каких-то может настроек тоже глобальных, а не для повседневной жизни в высокоуровневом полудинамическом объектно-ориентированном языке
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
24.07.2013, 00:56 [ТС] | 19 |
Или они УЖЕ обработаны и готовы к считыванию? зачем плодить модели там где они не нужны? абстракция ради абстракции? Однако если все же нужна гибкость, оформление как модель это хорошо, однако тогда никчему вообще константы с макросами достаточно @"строки" -- скриншот тестирования вида констант на примере Xcode
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
24.07.2013, 01:01 [ТС] | 20 |
я лишь показал каким образом обеспечить вывод подсказок ключей которых даже если и 50 (в вашем представлении) то это даже хорошо, ибо чем больше тем выше необходимость в этом. Для приложений ориентированных на работу с многомерными словарями только и всего.
0
|
24.07.2013, 01:01 | |
24.07.2013, 01:01 | |
Помогаю со студенческими работами здесь
20
Обращение к данным 1С Предприятия Обращение к данным хостинга обращение к данным структуры Обращение к определенным данным в таблице Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |