powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как найти элемент в типизированном массиве?
8 сообщений из 8, страница 1 из 1
Как найти элемент в типизированном массиве?
    #39993146
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрых суток,

Вопрос конечно банальный , но не хочется массив перебирать цыклом

Есть типизированный массив скажем на 100 элементов

Код: pascal
1.
2.
3.
4.
5.
6.
TGroupAD = record
  NameAD:string;
  DescriptionAD:string;

var
  masGroumAD:array of TGroupAD



Как в этом массиве найти значения для типа NameAD?

Перебором ? или все таки можно решить как то через множество?

Спасибо.
...
Рейтинг: 0 / 0
Как найти элемент в типизированном массиве?
    #39993148
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TDictionary<String,TGroupAD>
...
Рейтинг: 0 / 0
Как найти элемент в типизированном массиве?
    #39993170
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.rgreat.ru/tmp/Delphi/Indexes.pas

Код: pascal
1.
2.
3.
4.
  var A:=TArrayEx<Integer>;
  A:=[1,2,3,4,5,4,3,2,1];
  var B:=A.IndexesOf(3);
  WritelLn('Found value 3 at indexes: '+B.ToString(','));


Found value 3 at indexes: 2,6

Но для типизированных рекордов со ссылочными типами не подойдет ни мой массив ни TDictionary.
Такой рекорд стандартными хешами не обсчитывается.
...
Рейтинг: 0 / 0
Как найти элемент в типизированном массиве?
    #39993177
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreat
http://www.rgreat.ru/tmp/Delphi/Indexes.pas

Код: pascal
1.
2.
3.
4.
  var A:=TArrayEx<Integer>;
  A:=[1,2,3,4,5,4,3,2,1];
  var B:=A.IndexesOf(3);
  WritelLn('Found value 3 at indexes: '+B.ToString(','));



Found value 3 at indexes: 2,6

Но для типизированных рекордов со ссылочными типами не подойдет ни мой массив ни TDictionary.
Такой рекорд стандартными хешами не обсчитывается.

Ты решил рассказать про что ?
...
Рейтинг: 0 / 0
Как найти элемент в типизированном массиве?
    #39993182
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
Ты решил рассказать про что ?
Ты хотел что-то спросить?
...
Рейтинг: 0 / 0
Как найти элемент в типизированном массиве?
    #39993193
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FIL23
Добрых суток,

Вопрос конечно банальный , но не хочется массив перебирать цыклом

Есть типизированный массив скажем на 100 элементов

Код: pascal
1.
2.
3.
4.
5.
6.
TGroupAD = record
  NameAD:string;
  DescriptionAD:string;

var
  masGroumAD:array of TGroupAD



Как в этом массиве найти значения для типа NameAD?

Перебором ? или все таки можно решить как то через множество?

Спасибо.

Только перебором. И не важно будете ли вы сами перебирать или возложите этот перебор на какой-то класс.
А множества тут вряд ли чем-то помогут.
...
Рейтинг: 0 / 0
Как найти элемент в типизированном массиве?
    #39993246
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
northener
Только перебором. И не важно будете ли вы сами перебирать или возложите этот перебор на какой-то класс.
Ну можно ещё массив отсортировать по NameAD и искать бинарным поиском...
...
Рейтинг: 0 / 0
Как найти элемент в типизированном массиве?
    #39993404
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Если ему только NameAD:string в качестве ключа из всего рекорда интересно, то:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
type
  TGroupAD = record
    NameAD:string;
    DescriptionAD:string;
  end;

begin
  var masGroumAD:=THashTable<string,TGroupAD>.Create;
  masGroumAD.UniqueKeys:=False;

  var Item:=Default(TGroupAD);
  for var i:=1 to 5 do begin
    Item.NameAD:='test'+i.ToString;
    masGroumAD.Add(Item.NameAD,Item);
  end;
  for var i:=4 downto 1 do begin
    Item.NameAD:='test'+i.ToString;
    masGroumAD.Add(Item.NameAD,Item);
  end;

  masGroumAD.UniqueKeys:=False;
  var Nums:=masGroumAD.NumsById('test3');
  WritelLn('Found value 3 at indexes: '+B.ToString(','));


Found value 3 at indexes: 2,6
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как найти элемент в типизированном массиве?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]