|
Аналог стека в 1с | ☑ | ||
---|---|---|---|---|
0
deadpuma
24.09.12
✎
13:46
|
Подскажите есть ли в 1с такое понятие как стек? раньше кодил на delphi сейчас перешел на 1с поэтому особо и не в курсе что можно использовать как альтернативу.
Решаю задачу про распознавание формулы из строки вон там и нужен как раз стек. |
|||
1
Fragster
гуру
24.09.12
✎
13:49
|
Стек - частный случай буфера. Делай, например, через Массив
|
|||
2
aleks-id
24.09.12
✎
13:49
|
невнятная задача. если строку сунуть куда то с разбиением - используй многострочную строку.
|
|||
3
Hipernate
24.09.12
✎
13:50
|
список значений
|
|||
4
Hipernate
24.09.12
✎
13:51
|
(1) буфер понятие обобщенное ни к чему не обязывающее..
|
|||
5
Fragster
гуру
24.09.12
✎
13:56
|
(4) так я ж так сразу и сказал. сделать стек при этом через через Вставить(0) и [0]: .Удалить(0) ничего не мешает
|
|||
6
vmv
24.09.12
✎
13:57
|
если пристально посмотреть на объект Структура то можно увидеть в нем все атрибуты стека
|
|||
7
deadpuma
24.09.12
✎
13:58
|
т.е. делать через массив это и будет стек?!
|
|||
8
Hipernate
24.09.12
✎
13:59
|
(7) нет
|
|||
9
Hipernate
24.09.12
✎
14:01
|
массив это он и есть массив..
а стек последний вошел первый вышел такого нет в 1с. и двусвязного списка и кольца тоже нет. |
|||
10
Rie
24.09.12
✎
14:03
|
(7) Что такое стек - ты знаешь?
Если да - сможешь его реализовать хоть через Массив, хоть через СписокЗначений, хоть через Структуру с полями Данные и Вершина и т.д. и т.п. Если нет - тут медицина бессильна. |
|||
11
deadpuma
24.09.12
✎
14:03
|
(9) а что можно использовать в 1с вместо стека? список значений ?
|
|||
12
deadpuma
24.09.12
✎
14:05
|
(10) знать то знаю, только в 1с я еще не профи и не знаю что лучше подойдет
|
|||
13
Xapac_2
24.09.12
✎
14:05
|
(11)Ограничения у тебя в голове.
делай как "хотиш", массив, список, рекурсия.... |
|||
14
deadpuma
24.09.12
✎
14:06
|
(13) ладно. начал делать используя массив, так и буду тогда делать
|
|||
15
Rie
24.09.12
✎
14:06
|
(12) Ну и чем тебе Массив не угодил? И чем тебе не угодил СписокЗначений?
Ты программист? Вот и реализуй стек с использованием имеющихся структур данных. Не можешь - вон из профессии. |
|||
16
Reset
24.09.12
✎
14:07
|
Почти ООП:
Создаем обработку, называем Stack. В модуле пишем Перем Массив; Функция Pop() Экспорт Если Массив.Количество()=0 тогда Возврат Неопределено; Иначе Значение=Массив[0]; Массив.Удалить(0); Возврат Значение; КонецЕсли; КонецФункции Процедура Push(Значение) Экспорт Массив.Вставить(0,Значение); КонецПроцедуры Массив=Новый Массив; После это используем стек таким образом:
К вышесказанному относится как к шутке. |
|||
17
Rie
24.09.12
✎
14:09
|
(16) Это не шутка, а реализация. Вполне корректная. (Эффективность - отдельный вопрос).
|
|||
18
deadpuma
24.09.12
✎
14:16
|
(16) спасибо, теперь как в родном delphi :)
|
|||
19
Rie
24.09.12
✎
14:17
|
(18) Так же хреново кодишь в 1С, как и в Delphi?
|
|||
20
deadpuma
24.09.12
✎
14:19
|
(18) да, хотя в 1с немного полегче что ли дается
|
|||
21
GANR
24.09.12
✎
14:20
|
(0) Вот пример копирования настроек отбора СКД с помощью стека:
Процедура СкопироватьЭлементыОтбора(ИсходныеЭлементы, РезультирующиеЭлементы) СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("ИсходныеЭлементы", ИсходныеЭлементы); СтруктураПараметров.Вставить("РезультирующиеЭлементы", РезультирующиеЭлементы); СтруктураПараметров.Вставить("Курсор", 0); СтекВызовов = Новый Массив; СтекВызовов.Добавить(СтруктураПараметров); Пока СтекВызовов.Количество() <> 0 Цикл ТП = СтекВызовов[СтекВызовов.Количество() - 1]; Если ТП.Курсор <> ТП.ИсходныеЭлементы.Количество() Тогда ИсхЭлемент = ТП.ИсходныеЭлементы[ТП.Курсор]; ТипЭлемента = ТипЗнч(ИсхЭлемент); НовыйЭлемент = ТП.РезультирующиеЭлементы.Добавить(ТипЭлемента); ЗаполнитьЗначенияСвойств(НовыйЭлемент, ИсхЭлемент); Если ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("ИсходныеЭлементы", ИсхЭлемент.Элементы); СтруктураПараметров.Вставить("РезультирующиеЭлементы", НовыйЭлемент.Элементы); СтруктураПараметров.Вставить("Курсор", 0); СтекВызовов.Добавить(СтруктураПараметров); КонецЕсли; ТП.Курсор = ТП.Курсор + 1; Иначе СтекВызовов.Удалить(СтекВызовов.Количество() - 1); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
22
Reset
24.09.12
✎
14:23
|
(18) Только именно так писать не надо. Добавлять/удалять лучше к концу массива, и, конечно, не создавать для этого отдельную обработку ;)
|
|||
23
deadpuma
24.09.12
✎
14:26
|
(22) так я и делал через массив (по правилам СТЕКА!) просто решил лишний раз спросить тут. вы меня сблили)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |