Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDictionary значения добавляются не по порядку / 22 сообщений из 22, страница 1 из 1
14.05.2019, 08:49
    #39812774
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
В TDictionary значения добавляются не по порядку.

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

Задача простая. В цикле добавляю значения, а после цикла нужно добавить ещё 2-3, но так, чтобы эти 2-3 были в конце.
...
Рейтинг: 0 / 0
14.05.2019, 08:55
    #39812777
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
я тут пример увидел
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
14.05.2019, 08:58
    #39812780
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
X11Может можно TDictionary заставить работать так, как я хочу?
Тогда его плюсы (скоростные) будут нивелированы.

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



Код: 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
14.05.2019, 11:57
    #39812897
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
В общем, да, теперь все элементы по порядку. И после цикла добавляются несколько элементов именно в конец списка.
...
Рейтинг: 0 / 0
14.05.2019, 12:17
    #39812919
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
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
14.05.2019, 12:25
    #39812923
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
да, точно, спасибо
...
Рейтинг: 0 / 0
14.05.2019, 12:29
    #39812929
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
wadmanТогда его плюсы (скоростные) будут нивелированы.

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

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

как вариант хранить данные в массиве, а в мапке индекс элемента в массиве
...
Рейтинг: 0 / 0
14.05.2019, 14:21
    #39813034
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
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
14.05.2019, 14:37
    #39813046
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDictionary значения добавляются не по порядку
_Vasilisk_TDictionary нужен для быстрого поиска значений по ключу.

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

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

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

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

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

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

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

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

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

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


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