powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDictionary значения добавляются не по порядку
22 сообщений из 22, страница 1 из 1
TDictionary значения добавляются не по порядку
    #39812774
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В TDictionary значения добавляются не по порядку.

Да, можно что-то другое использовать или свой лисапет, но удобство TDictionary в том, что там без конвертации есть целочисленный тип (ключ) TDictionary<integer, string>, т.е. не надо использовать IntToStr.
Может есть что-то похожее искаропки? За эти несколько лет в Delphi вроде надобавляли разных вкусностей.
Может можно TDictionary заставить работать так, как я хочу?

Задача простая. В цикле добавляю значения, а после цикла нужно добавить ещё 2-3, но так, чтобы эти 2-3 были в конце.
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39812777
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я тут пример увидел
https://stackoverflow.com/questions/14490275/tdictionary-populated-during-create-example-code
что TList можно использовать похожим способом

Код: pascal
1.
2.
3.
List := TList<TPair<string, Integer>>.Create;
List.Add(TPair<string, Integer>.Create('Foo', 42));
List.Add(TPair<string, Integer>.Create('Bar', 666));



Внимание, вопрос Знатокам :) в этом случае та же проблема будет?
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39812780
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Может можно TDictionary заставить работать так, как я хочу?
Тогда его плюсы (скоростные) будут нивелированы.

X11в этом случае та же проблема будет?
Не должна.
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39812894
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получается небольшое монстро, а не код



Код: pascal
1.
List.Add(TPair<Integer, String>.Create(SP_GET_TYPES_LIST.FieldByName('TYPE_ID').AsInteger, SP_GET_TYPES_LIST.FieldByName('TYPE_NAME').AsString));



Переделал немножк

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Type

  TPairIntString = TPair<Integer, string>;
...
...
...

function  GetXXX(xxxx): TList<TPairIntString>;
begin
...
  result := TList<TPairIntString>.Create;
...
...      
      while not SP_GET_TYPES_LIST.Eof do
      begin
        Result.Add(TPairIntString.Create(SP_GET_TYPES_LIST.FieldByName('TYPE_ID').AsInteger, SP_GET_TYPES_LIST.FieldByName('TYPE_NAME').AsString));
        SP_GET_TYPES_LIST.Next;
      end;
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39812897
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, да, теперь все элементы по порядку. И после цикла добавляются несколько элементов именно в конец списка.
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39812919
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11получается небольшое монстро, а не код



Код: pascal
1.
2.
3.
4.
5.
      while not SP_GET_TYPES_LIST.Eof do
      begin
        Result.Add(TPairIntString.Create(SP_GET_TYPES_LIST.FieldByName('TYPE_ID').AsInteger, SP_GET_TYPES_LIST.FieldByName('TYPE_NAME').AsString));
        SP_GET_TYPES_LIST.Next;
      end;



маленький хинт: не вычисляй поля на каждой итерации

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
      
      var F1, F2: TField;
      //……..
      F1 := SP_GET_TYPES_LIST.FieldByName('TYPE_ID');
      F2 := SP_GET_TYPES_LIST.FieldByName('TYPE_NAME');
      while not SP_GET_TYPES_LIST.Eof do
      begin
        Result.Add(TPairIntString.Create(F1.AsInteger, F2.AsString));
        SP_GET_TYPES_LIST.Next;
      end;
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39812923
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, точно, спасибо
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39812929
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanТогда его плюсы (скоростные) будут нивелированы.

Не нашел тестов про TDictionary vs Tlist, а тут есть тест про TObjectList vs TObjectDictionary

https://delphi-bar.blogspot.com/2017/09/tobjectlist-vs-tobjectdictionary.html
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39812983
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11В TDictionary значения добавляются не по порядку.
по определению не должон

как вариант хранить данные в массиве, а в мапке индекс элемента в массиве
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813034
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

TDictionary нужен для быстрого поиска значений по ключу. Порядок записей в нем не определен. Если тебе нужно просто хранить пары значений, то используй TList<record>. Если же тебе нужен таки TDictionary для доступа ключ-значение, но в какой-то момент вывести записи в каком-то порядке, то делай так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  LVals: TArray<TPair<..., ...>>;
  LData: TPair<..., ...>;
begin
  LVals := ADictionary.ToArray;
  TArray.Sort<TPair<..., ...>>(LVals, FComparer);
  for LData in LVals do
    AddData(LData.Key, LData.Value);
end;
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813046
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_TDictionary нужен для быстрого поиска значений по ключу.

я знаю, но мне поиск не нужен в данном конкретном случае, а только хранение и цикл for in
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813047
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Если же тебе нужен таки TDictionary для доступа ключ-значение, но в какой-то момент вывести записи в каком-то порядке, то делай так

Сортировка по ключу или по значению не подходит. Нужно, чтобы те записи, которые добавлены в список последними, так и оставались последними.

Я уже решил проблему, как я написал выше.
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813058
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11я знаю, но мне поиск не нуженТогда и TDictionary тебе не нужен
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813265
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Тогда и TDictionary тебе не нужен+1

X11, не порти сову с глобусом!
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813278
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

не слушай их, натягивай и дальше!
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813317
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай повторюсь: я проблему решил.

X11В общем, да, теперь все элементы по порядку. И после цикла добавляются несколько элементов именно в конец списка.
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813318
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

а удаляются - нормально?
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813323
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

поищи TLinkedDictionary, в сети реализаций полно
у меня тоже где-то была на основе TDictionary, но найти не могу
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813330
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё, ещё не удалял, а оно мне и не надо. Если надо, делаю clear и заново наполнение.
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813331
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)TLinkedDictionary

это что-то искаропки?
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813368
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11kealon(Ruslan)TLinkedDictionary

это что-то искаропки?он просто относится к классическим структурам (например, в Java это LinkedHashMap), но в RTL его почему-то не реализовали
но энтузиастов много
...
Рейтинг: 0 / 0
TDictionary значения добавляются не по порядку
    #39813410
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
главное - вовремя остановиться
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDictionary значения добавляются не по порядку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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