Ответ 1
Свойства Keys
и Values
вашего словарного класса имеют тип TDictionary<string, string>.TKeyCollection
и TDictionary<string, string>.TValueCollection
соответственно. Эти классы выводятся из TEnumerable<T>
и не могут быть повторены по индексу. Однако вы можете перебирать Keys
, или действительно Values
, а не то, что выполнение последнего было бы очень полезно для вас.
Если вы повторили более Keys
, ваш код может выглядеть так:
var
Key: string;
....
for Key in requestContent.Keys do
request.Append(Key + '=' + TIdURI.URLEncode(requestContent[Key]) + '&');
Это, однако, неэффективно. Поскольку вы знаете, что вы хотите как ключ, так и значение соответствия, вы можете использовать итератор словаря:
var
Item: TPair<string, string>;
....
for Item in requestContent do
request.Append(Item.Key + '=' + TIdURI.URLEncode(Item.Value) + '&');
Итератор пары более эффективен, чем первый вариант выше. Это связано с тем, что детали реализации означают, что итератор пары может выполнять итерацию словаря без:
- Вычисление хэш-кодов для каждой клавиши и
- Выполнение линейного зондирования при столкновении хэш-кодов.