Имя: Пароль:
1C
 
Получить первую пару КлючЗначение соответствия
,
0 Stim
 
27.01.22
10:22
СоответствиеТест = Новый Соответствие;
    СоответствиеТест.Вставить("тест",1);    
    Сообщить(СоответствиеТест[0].Ключ);

Ошибка. Почему?
Как получить ключ или значение первого элемента коллекции соответствия?
1 vicof
 
27.01.22
10:23
Потому что соответствие это неупорядоченное множество.
2 Kassern
 
27.01.22
10:24
(0) Элементы коллекции:
КлючИЗначение
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы соответствия.
Возможно обращение к значению элемента посредством оператора [...]. В качестве аргумента передается значение ключа элемента.
3 vicof
 
27.01.22
10:25
А есть еще метод получить()
4 arsik
 
гуру
27.01.22
10:28
(0) В соответствии есть фишка. Вставленное первым не факт что при переборе "Для каждого … Из … Цикл" будет первым.
(1) Мне кажется все же упорядоченное. Но оно вроде как по хешам ключей упорядочивает.
5 Dmitrii
 
гуру
27.01.22
10:29
(0) Только обходом в цикле Для Каждого. Но в каком порядке будут выбраны элементы коллекции - никто не знает. В первой итерации цикла может оказаться не тот элемент, который ты первым туда добавлял.
6 Stim
 
27.01.22
10:30
(3) а я не знаю ключа. Он формируется программно
7 Dmitrii
 
гуру
27.01.22
10:32
Добавляй второе соответствие. Где ключом будет индекс (порядковый номер) элемента, а значением - ключ из твоего соответствия.
8 Dmitrii
 
гуру
27.01.22
10:33
+ к (7) Или массив. Всё равно. Массив даже наверное лучше. Он упорядочен и быстрее получает значение по индексу.
9 Stim
 
27.01.22
10:39
(8) мне нужно хранить связанную пару значений, а не одно
10 vicof
 
27.01.22
10:42
(9) Вывод: архитектура какашка)
11 Dmitrii
 
гуру
27.01.22
10:49
(9) И что?
Чем плох массив из ключей соответствия?

МассивКлючей = Новый Массив;
СоответствиеТест = Новый Соответствие;

СоответствиеТест.Вставить("тест", 1);
МассивКлючей.Добавить("тест");

СоответствиеТест.Вставить("ДругойТест", 2);
МассивКлючей.Добавить("ДругойТест");

СоответствиеТест.Вставить(42, "Ответ на главный вопрос");
МассивКлючей.Добавить(42);

// Хочу получить первый элемент из соответствия
Сообщить("Ключ: " + Строка(МассивКлючей[0]);
Сообщить("Значение: " + Строка(СоответствиеТест[МассивКлючей[0]].Значение);
// Хочу получить третий элемент из соответствия
Сообщить("Ключ: " + Строка(МассивКлючей[2]);
Сообщить("Значение: " + Строка(СоответствиеТест[МассивКлючей[2]].Значение);
12 NorthWind
 
27.01.22
11:13
(0) никак. Соответствие это аналог map в С++, словарь данных. Предполагается, что данные будут извлекаться только по ключу и никак иначе, никакого первого и последнего там нет. Если нужно извлекать данные по индексу, то это к другим коллекциям, например к старой доброй таблице значений. Там можно обратиться по номеру строки, а в случае чего через НайтиСтроки поискать и по ключу.
13 Kassern
 
27.01.22
11:14
(11) может он для примера написал СоответствиеТест.Вставить("тест", 1); а на деле получает hhtp ответ джисоном и пихает в соответствие. Что там внутри не знает, может какая то хитрая динамическая генерация тегов. Только вот смысла первого ключа я понять не могу. Ну переберите Для каждого ТекСвязка По Соответствие Цикл Возьмите первую связку и прервите
14 Kassern
 
27.01.22
11:15
Только особого смысла в этом нет, должно быть понимание, какие ключи есть в соответствии и уже с ними идет работа. Не факт, что именно в первой полученной перебором связке будет нужное вам значение.
15 Dmitrii
 
гуру
27.01.22
11:51
(13) >> может он для примера написал СоответствиеТест.Вставить("тест", 1); а на деле получает hhtp ответ джисоном и пихает в соответствие.

Конечно это возможно. Фиг его знает.
Но если возникла задача получить именно первый элемент из коллекции, вероятнее всего, есть какой-то определенный порядок добавления элементов в коллекцию. В противном случае задача не имеет смысла.
Другой вопрос, что алгоритм может быть таким, что нет возможности вкорячить туда добавление элементов в массив ключей одновременное с добавлением элементов в соответствие.
Если же соответствие - это результат возвращаемый при выполнении какого-то метода платформы, то решение с массивом ключей не возможно. Но тогда и смысла нет получать именно первую пару.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.