Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Именованный массив, Как создать подобное? 
:(
    Опции темы
MadCoder
Дата 24.3.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Приветствую!

Понадобилось создать нечто вроде именованного массива. Резонный вопрос: что это такое?

Вот пример, как сейчас выглядит код:
Код

var
SomeArray: Array of String;
...
begin
SetLength(SomeArray, 10);
SomeArray[9]:='Бронная, 12';

Хочу сделать, чтобы запрос к данным массива шел не через счетчик (1.2.3 и т.д.), а через заданную текстовую переменную:
Код

SomeArray[Centr]:='Бронная, 12';
SomeArray[South]:='Новый Арбат, 15';

Причем эти самые текстовые переменные можно было создавать в рантайме...
 smile 
PM WWW ICQ   Вверх
Alix
Дата 24.3.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



стандартные
TBucketList
TObjectBucketList
возможно будет полезен THashedStringList


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
dma
Дата 24.3.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.12.2006
Где: Belarus, Minsk

Репутация: 1
Всего: 1



Ассоциативные массивы =)

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  associative_arrays.rar 56,46 Kb
PM MAIL ICQ Skype GTalk   Вверх
MadCoder
Дата 24.3.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Цитата(Alix @ 24.3.2008,  11:32)
стандартные
TBucketList
TObjectBucketList
возможно будет полезен THashedStringList

Я немного сократил свой код smile. Мне нужно именно массив, я в него свои типы (record) складываю.

Код

type Sometype=RECORD
lala: String;
la2: String;
end;

var
A: Array of Sometype;

begin
A['config.bat'].lala:='111';
end;


что-то вроде этого smile.

Добавлено через 33 секунды
Цитата(dma @ 24.3.2008,  12:08)
Ассоциативные массивы =)

Спасибо, попробую разобраться smile 
PM WWW ICQ   Вверх
Alix
Дата 24.3.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Цитата(MadCoder @  24.3.2008,  12:28 Найти цитируемый пост)
Я немного сократил свой код smile. Мне нужно именно массив, я в него свои типы (record) складываю.

это никак не ограничивает тебя в использовании данных классов, в конце концов, можно описать обертку над ними для большего удобства.
А написать самому подобное можно так:
Код
type
  TYourRecord = record
    lalala  : string;
    tratata : byte;
  end;

  TAssociativeArray = class
  private
    ...
    procedure SetValue(const Name : string; Value : TYourRecord);
    function GetValue(const Name: string): TYourRecord;
  public
    property Items[const Name : string] : TYourRecord read GetValue write SetValue; default;
  end;

implementation

{ TAssociativeArray }

function TAssociativeArray.GetValue(const Name: string): TYourRecord;
begin
  //...
end;

procedure TAssociativeArray.SetValue(const Name: string;
  Value: TYourRecord);
begin
  //...
end;
Т.е. у тебя получается у класса св-во items с индексом - строкой. А т.к. это св-во имеет модификатор default, то обращаться к нему можно не как myArray.items['trali-vali'], а myArray['trali-vali'], т.е. внешне от массива и не отличить. Дело только во внутренней реализации хранения значений и сеттера/геттера этих самых значений.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
pseud
Дата 24.3.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TSomeRecord = class(TComponent)
  public
    lala: string;
    lala2: string;
    name: string;
  end;


type
  TSomeArray = class(TComponent)
  private
    F: array of TSomeRecord;
  public
    function RecordByName(const ARecordName: string): TSomeRecord;
    constructor Create(AOwner: TComponent); override;
  end;


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FArray: TSomeArray;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TSomeArray }

constructor TSomeArray.Create(AOwner: TComponent);
begin
  inherited;
  SetLength(F, 2);

  F[0] := TSomeRecord.Create(Self);
  F[0].name := 'record0';

  F[1] := TSomeRecord.Create(Self);
  F[1].name := 'record1';
end;


function TSomeArray.RecordByName(const ARecordName: string): TSomeRecord;
var
  i: Integer;
  rec: TSomeRecord;
begin
  for i := Low(F) to High(F) do
  begin
    rec := F[i];
    if AnsiCompareText(rec.name, ARecordName) = 0 then
    begin
      Result := rec;
      Exit;
    end;
  end;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  FArray := TSomeArray.Create(Self);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FArray.RecordByName('record1').lala := '111';
  ShowMessage(FArray.RecordByName('record1').lala);
end;

end.




--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.