![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| ShadeSt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
Delphi позволяет объявить массив, элементы которого имеют отрицательные индексы:
Хочется услышать Ваше мнение о таком способе объявления массивов, пользуетесь ли Вы этой возможностью. Насколько я знаю для большинства задач достаточно иметь массив с положительными индексами, по крайней мере для тех, с которыми я сталкивался. -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Вообще массивы редко использую.
А уж тем более с отрицательными индексами Индекс вообще редко когда должен нести информацию. Его основное назначение - порядковый номер элемента, отличный от других элементов. Что-то вроде UniqueID. А какой он - по барабану. 0..N - стандартное нормальное решение для этого. |
|||
|
||||
| Sunvas |
|
||||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Мое мнение таково: если кому-то мал массив
То надо использовать
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
||||
|
|||||
| ShadeSt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
понятно.
проблема не в том, что он мал, а в том, что: был набор описаний элементов, начинающийся в нуля, описания были в массиве, для каждого из них была константа индекса, примерно так:
Потом встал вопрос, как наиболее верно, с наименьшими изменениями добавить туда еще один пункт, учитывая что данный список может расти "вперед", а пунктик(пусть будет "алкоголь") надо добавить с уникальным индексом. сначала было решение добавить его с нулевым индексом, а константы сместить, но при данном подходе приходилось бы править все обращения к массиву и делать там смещение. или как вариант добавить его с бОльшим индексом, тогда, либо пришлось бы его двигать, либо если индекс был бы = 999, то большая часть массива бы просто висела без использования. вобщем так я нарвался на то, что можно делать отрицательные индексы. это понятно, просто по логике программы использование отрицательного индекса оказалось наиболее быстрым и "безболезненным" решением для остального кода. Поэтому и возник вопрос "на сколько красиво" поступать таким образом. Если не рекомендуется - то я перепишу все структуры и соответственно переделаю логику; а если так можно поступать - то пусть останется (просто это оказалось наиболее "красивым" вариантом) -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
А как тогда задать минусовые индексы динамическим массивам?
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Не нужно привязывать данные к выводу.
Данные и вывод должны быть сами по себе. Например, хранить данные в TStringList, а для вывода создавать другой стринглист, сортировать и выводить. |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Этого делать нельзя. |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
ShadeSt, в твоём случае было бы лучше сделать класс контейнер с публичным индексированным свойством DrinkName, который и выдвал бы данные по нужному индексу. Тогда чтобы добавить вот такой вот уникальный индекс, достаточно было бы изменить метод GetDrinkName.
Небольшой пример:
Это сообщение отредактировал(а) Bose - 16.11.2006, 21:42 |
|||
|
||||
| ShadeSt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
учту. интересное предложение, я как то о таком не думал, попробую прикрутить все это дело. но все же я видимо неудачно привел пример, в том массиве как раз только данные и содержатся, причем индексы массива соответствуют полю ID из некоторого импортируемого xml файлика определенной структуры. этот файлик формируется в др. программе и может меняться, т.е. как раз тот случай, когда может расти массив. Помимо импорта, есть случай, когда массив заполняется данными, полученными из БД. И выбран был именно массив, по той причине, что с ним оказалось на удивление просто работать во всех кусках кода где это надо, и некоторые моменты, получилось даже упростить. Был конечно вариант не вносить в массив еще один элемент с отрицательным индексом, но тогда немного усложняется код. Создавать список (TList, TStringList) тоже особо не получится, да и не кажется столь необходимым. Я по мере развития темы, все таки дохожу до правильной формулировки вопроса -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет, не является.
Это означает, что реализация плохо продумана. Отделяй данные от сортировки. Не нужно впихивать данные в странное место из-за того, что они не там по алфавиту. Порядок не имеет значения. Он имеет значение при отображении. А это не имеет отношения к хранению. А, если у тебя потом появится запись, которую нужно воткнуть между 3 и 4? Что тогда? Создавать дробные элементы? Выбрось это из головы. Пусть идут в порядке добавления. А как их показать - это уже другой вопрос. Причём более простой. |
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 19 |
ShadeSt, как-то давно был один прецендетн в использовании отрцательных индексов массива. Когда опыта было мало, советовался с профессионалами, они не разделяли мнения о том, что индекс должен быть отрицательным.
Стандарт - индекс 0..n. Отрицательные индексы, как заметил Snowy, не есть хорошо. Использовать можешь, дабы язык позволяет, однако если для тебя программирование больше чем просто "абы было и работало", то начальный индекс - 0 (или на край - 1). -------------------- ...все в мире относительно |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Ну есть одна задумка, как можно исполбьзовать отрицательные индексы:
Допустим, надо построить график функции, точки абсциссы которой есть и отрицательные. И график надо построить от [-10;10]. График функции y = x^2 - 3; В этом случае, как кстати, понядобятся отрицательные индексы:
-------------------- Ll 2 |
|||
|
||||
| ShadeSt |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
ок. понял. это я и хотел узнать, я кстати до этого момента думал, что отрицательные индексы вообще нельзя вводить и дельфи просто этого не позволит, а оказалось, что можно, но лучше не нужно.
там можно ввести смещение на 10ть элементов и массив начать с нуля, просто придется учитывать смещение, но массив будет "нормальный". Вобщем исходя из рассуждений я сделал вывод, что использование массивов с отрицательными индексами является злом и от него надо избавляться более детально продумывая реализацию. Всем спасибо за участие! -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
||||
|
|||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Красивше будет так. И вставить можно куда огодно и что угодно
Добавлено @ 09:09
Добавлено @ 09:19 не делай из этого цель. Это средство -------------------- Обижено школьников: 8 |
||||
|
|||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 19 |
Отриц. индекс не то чтобы в тему, таким образом задача становится нагляднее для человека. Но смещение - более "правильное" решение. К тому же, наверняка этот график придется масштабировать, перемещать и т.д., поэтому использование коэффициентов смещения/сжатия будет необходимым. -------------------- ...все в мире относительно |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |