Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.03.2015, 13:20
RomanRens RomanRens вне форума
Прохожий
 
Регистрация: 23.02.2012
Сообщения: 7
Репутация: 10
По умолчанию Динамические массивы

Доброго времени суток! Есть база данных, в которой каждому объекту присваивается категория, но число категорий ограничено массивом.Задача: необходимо сделать чтобы количество этих категорий было динамическим и их конец ничем не определялся (например, количество вводится с консоли). Эскпериментировал с SetLenght, но что-то пошло не так..
Вложения
Тип файла: rar Adress_Book.rar (27.8 Кбайт, 3 просмотров)
Ответить с цитированием
  #2  
Старый 29.03.2015, 14:49
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

В каком месте вы экспериментировали? Единственное упоминание динамического массива в описании типов TArr.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 30.03.2015, 11:22
CynicRus CynicRus вне форума
Прохожий
 
Регистрация: 26.02.2013
Сообщения: 30
Версия Delphi: Lazarus, XE 3.
Репутация: 10
По умолчанию

Я узрел только GroupArr : array [0..8] of string[20];, что вроде как по описанию проблемы и должно быть вроде как динамически. Но этот статический массив гвоздями прибит к категориям в процедуре заполнения этих категорий. Экспериментов я не увидел.
PS: форматирование вырвиглазно.

Но я сегодня добрый и потому укажу направление:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type
  DataArray<T> = record
    Data: array of T;
    procedure Append(const Value: T);
    function Count: integer;
  end;
 
 
{ DataArray<T> }
 
procedure DataArray<T>.Append(const Value: T);
begin
  SetLength(Data, length(Data) + 1);
  Data[high(Data)] := Value;
end;
 
function DataArray<T>.Count: integer;
begin
  result := length(Data);
end;

Использование:
Код:
1
2
3
4
5
6
7
8
procedure TForm1.FormCreate(Sender: TObject);
var
  data: DataArray<string>;
begin
  data.Append('Alpha');
  data.Append('Beta');
  Caption := IntToStr(data.Count) + ': ' data.Data[0] + ' & ' + data.Data[1];
end;
MAD: пользуемся тегами по назначению.

Последний раз редактировалось M.A.D.M.A.N., 30.03.2015 в 14:41.
Ответить с цитированием
  #4  
Старый 30.03.2015, 19:54
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Что это? DataArray<T>
Первый раз вижу такое описание и ведь компилируется.
Я так понимаю, это какое-то хитрое расширение позволяющее делать структуру с динамическим типом поля?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 30.03.2015 в 19:58.
Ответить с цитированием
  #5  
Старый 30.03.2015, 20:08
CynicRus CynicRus вне форума
Прохожий
 
Регистрация: 26.02.2013
Сообщения: 30
Версия Delphi: Lazarus, XE 3.
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Что это? DataArray<T>
Первый раз вижу такое описание и ведь компилируется.
Я так понимаю, это какое-то хитрое расширение позволяющее делать структуру с динамическим типом поля?

T? Так это ведь дженерики.

Подробнее тут: https://sergworks.wordpress.com/2014...ces-in-delphi/
Ответить с цитированием
  #6  
Старый 30.03.2015, 20:28
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Веришь, но понятие то я это слышал, а вот на практике ни разу не сталкивался. Для чего и как его прилепить в своих проектах пока даже и не соображу.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 30.03.2015, 21:21
CynicRus CynicRus вне форума
Прохожий
 
Регистрация: 26.02.2013
Сообщения: 30
Версия Delphi: Lazarus, XE 3.
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Веришь, но понятие то я это слышал, а вот на практике ни разу не сталкивался. Для чего и как его прилепить в своих проектах пока даже и не соображу.

Здорово экономит время-))) Вместо наследников от TList - TList<T> С итератором. Или вместо самописных хэштаблиц - TDictionary. Красота.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:15.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025