Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как найти элемент в типизированном массиве? / 8 сообщений из 8, страница 1 из 1
27.08.2020, 20:32
    #39993146
FIL23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти элемент в типизированном массиве?
Добрых суток,

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

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

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

var
  masGroumAD:array of TGroupAD



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

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

Спасибо.
...
Рейтинг: 0 / 0
27.08.2020, 20:36
    #39993148
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти элемент в типизированном массиве?
TDictionary<String,TGroupAD>
...
Рейтинг: 0 / 0
27.08.2020, 23:00
    #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
27.08.2020, 23:38
    #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
28.08.2020, 00:10
    #39993182
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти элемент в типизированном массиве?
defecator
Ты решил рассказать про что ?
Ты хотел что-то спросить?
...
Рейтинг: 0 / 0
28.08.2020, 03:19
    #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
28.08.2020, 09:06
    #39993246
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти элемент в типизированном массиве?
northener
Только перебором. И не важно будете ли вы сами перебирать или возложите этот перебор на какой-то класс.
Ну можно ещё массив отсортировать по NameAD и искать бинарным поиском...
...
Рейтинг: 0 / 0
28.08.2020, 12:57
    #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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как найти элемент в типизированном массиве? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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