|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.01.2017, 17:46 | #1 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Посоветуйте структуру данных...
Здравствуйте.
В какую структуру удобнее всего запихнуть следующие данные для работы? Есть несколько ФИО. Каждому ФИО соответствует от одного до нескольких данных типа:
...или это может быть array of set, где set будет из record, а параллельно будет array of ФИО... P.S. На всякий случай - у меня Delphi 7. Последний раз редактировалось Ship_1; 11.01.2017 в 09:57. |
10.01.2017, 20:12 | #2 | |||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Обычная база данных(БД).
Цитата:
Цитата:
Все структуры умеют методы для: 1) доступа к данным; 2) поиска; 3) удаления; 4) вставки. Некоторые дополнительные методы 5) индесный доступ; 6) добавление. Так вот структура выбирается что-бы оптимизировать скорость работы определённых методов. А не что-бы лучше получить доступ. Если вы не знаете какие операции у вас будут чаще использоваться, то подойдёт любая структура. Но лучше Б+деревья которые работают среднем по среднему лучше всех. По всем методам первой группы O(log(N)). Я бы взял коллекцию TList<T>. Она удобнее, в том плане что по сравнению с массивом там уже есть куча готовых методов просто подставляй данные и пользуйся. А для массивов всё ручками: сортировка, поиск, вставка и тд http://docwiki.embarcadero.com/CodeE...TList_(Delphi) Цитата:
https://ru.wikipedia.org/wiki/Нормальная_форма Что это значит? Это значить что ФИО не должны повторяться. А этого можно добиться если вынести их в отдельный массив, а в первом массиве сделать индекс или ссылку на второй массив. Это в теории позволяет ускорить такие операции как вставка, сортировка так как не придётся по символьно перемещать и сравнивать строки. Но то в теории на практике может оказаться всё иначе. Виднеие проекта вещь такая что порой проще начать с простого массива с двумя полями ФИО и Данные.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 10.01.2017 в 20:17. |
|||
10.01.2017, 23:00 | #3 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
11.01.2017, 09:56 | #4 | |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Цитата:
Для данной реализации - не больше 15-ти. |
|
11.01.2017, 10:15 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
И данные где-то же хранить нужно. При таком количестве с СУБД нет смысла связываться. Можно в типизированном файле хранить и работать с массивом структур или с List. А можно ClientDataSet взять, который может в своей структуре выгрузить/загрузить данные в файл (попутно можно закракозяблить этот файл, хотя бы просто с использованием xor, затруднив его чтение сторонними средствами). И все плюсики его использования типа простого редактирования и наличия индексов для удобного поиска
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
11.01.2017, 10:27 | #6 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
ClientDataSet не получится... У меня на работе только Portable-версия с 5 вкладками самых основных компонентов, среди которых этого нет.
Думаю, что меня вполне устраивает типизированный файл. Pavia, увидел в статье про дженерики, что они появились с Дельфи 2009... Что ж, придётся работать ручками Зато понятнее. Может, свой класс создать?.. Но я этим никогда не занимался и в классы не вникал. Мне, например, непонятно когда и зачем надо и не надо использовать и как осуществлять Create, Free и Destroy. И на данный момент мне кажется, что я в разы дольше буду разбираться с этим, чем сделаю с массивами из записей с дополнительными функциями поиска, а пользы будет меньше, чем затраченное время... Кстати, а что подразумевалось в "в первом массиве сделать индекс или ссылку на второй массив"? Массив с ФИО сделать не просто массивом с ФИО, а массивом из записей с двумя полями: ФИО и индекс позиции во втором массиве? Пока я пришёл к мнению, что лучше всего будет поступить так. Код:
Последний раз редактировалось Ship_1; 11.01.2017 в 11:41. |
12.01.2017, 10:36 | #7 |
Форумчанин
Регистрация: 27.04.2012
Сообщений: 219
|
Сделайте на INI файлах.
Структура INI с фамилиями следующая: Код:
Код:
P/S:Ознакомтесь с методами чтения INI файла ReadSection,ReadSections,ReadSectio nValues,ReadStrng(integer,Bool и.т.д.) Ознакомтесь с методами записи в INI файл WriteString(integer,Bool и.т.д.) Ознакомтесь с методами удаления из INI файла DeleteKey Скорость поиска будет напрямую зависеть от кол-ва данных и мощностей ПК Минусы: С сортировкой придется попотеть Данные в открытом доступе и могут быть исправлены руками в блокноте
Пишу много и развернуто
Последний раз редактировалось Heneken87; 12.01.2017 в 10:51. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача на структуру данных. (Помогите) | Testerok | PHP | 5 | 10.02.2014 18:18 |
Запись данных в структуру | MatrixGru | Общие вопросы Delphi | 6 | 21.10.2013 10:30 |
С++.Ввод данных в структуру. | Bullrock | Помощь студентам | 1 | 03.04.2012 13:55 |
[C++|Builder] Задача на структуру данных | conqueror | Помощь студентам | 3 | 17.01.2009 14:25 |