![]() |
![]() |
![]() |
|
Сравнение двух списков значений | ☑ | ||
---|---|---|---|---|
0
DayDreamer
07.12.07
✎
10:40
|
Каким образом быстрее всего определить существуют ли элементы двух списков значений, присутствующие в обоих списках?
|
|||
1
Фокусник
07.12.07
✎
10:50
|
(0) правильно... быстрее всего на мисте спросить (:
|
|||
2
DayDreamer
07.12.07
✎
13:28
|
up
|
|||
3
France
07.12.07
✎
13:29
|
для 8.1 - выкинуть в таблицу значений и запросом выбрать через внутреннее соединение..
|
|||
4
DayDreamer
07.12.07
✎
13:32
|
(3) а можно чуть более развернуто?
если можно с примером |
|||
5
France
07.12.07
✎
13:46
|
из списка значений в массив
из массива в таблицу значений таблицs значений через менеджер значений в запрос PS писать код времени нет да и лениво.. |
|||
6
Asmody
модератор
07.12.07
✎
13:56
|
(5) охренеть быстрее :)
|
|||
7
France
07.12.07
✎
13:57
|
(6) таки ж, кода может и не мало))..
конечно же, проше перебирать один из СП и проверяет его наличие во втором)).. |
|||
8
nop
07.12.07
✎
13:58
|
(6) +1.
Почему бы не соединить таблицыЗначений и не сделать свернуть? |
|||
9
DayDreamer
07.12.07
✎
14:03
|
(8) и что нам это даст?
|
|||
10
nop
07.12.07
✎
14:04
|
(9) где х = 2 Те элементы есть в обеих списках
|
|||
11
nop
07.12.07
✎
14:06
|
загоняешь списки в ТЗ.
В тз делаешь нову колонку х. Для ТЗ1.х = 1 Для ТЗ2.х = 2 Сворациваешь по колонке Объект, х - суммировать. Просматриваешь результат Если х = 1 только в в ТЗ1, 2- только ТЗ2, 3 - и там и там. |
|||
12
France
07.12.07
✎
14:31
|
(11) сам то пробовал?..
|
|||
13
nop
07.12.07
✎
14:35
|
(12) зачем?
|
|||
14
France
07.12.07
✎
14:40
|
(13) покаж, как "загоняеш списки в ТЗ" и что за тз1 и тз2?
|
|||
15
nop
07.12.07
✎
14:59
|
(14) ты хочь увидеть нечто необычно? Через массив. ТЗ1 - это данные 1го списка. ТЗ2 - 2го
|
|||
16
France
07.12.07
✎
15:05
|
а дальше?.. можно код глянуть?
|
|||
17
nop
07.12.07
✎
15:12
|
(16) ок. щас напишу
|
|||
18
nop
07.12.07
✎
15:30
|
(16)
Функция СписокВтЗ(список) мас = список.ВыгрузитьЗначения(); тз = Новый ТаблицаЗначений(); кол = тз.Колонки.Добавить("объект"); тз.ЗагрузитьКолонку(мас, кол); тз.Колонки.Добавить("х", "Число"); тз.ЗаполнитьЗначения(1, "х"); ВОзврат тз; КонецФункции Процедура ПристегнутьКтаблице(табл, что) Если ТипЗнч(что) = "СписокЗначений" Тогда Для каждого х из что Цикл стр = табл.Добавить(); стр.х = 2; стр.Объект = х.Значение; КонецЦикла; КонецЕсли; КонецПроцедуры тз1 = СписокВТЗ(список1); ПристегнутьКтаблице(тз1, список2); Свернуть("объект", "х"); |
|||
19
France
07.12.07
✎
15:48
|
сам то проверял?
и что будет,если передать список из 100 000 элементов? |
|||
20
nop
07.12.07
✎
15:58
|
(19) покажи как ты ТЗ в запрос вставишь
|
|||
21
tsr
07.12.07
✎
16:14
|
А если ЗначениеВСтрокуВнутр , а затем сравнить строки?
|
|||
22
France
07.12.07
✎
16:38
|
(20)
Процедура СоздатьВрТабл(пТабЗнач,пИмяВремТаблицы, знач пМенеджер) Экспорт Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = пМенеджер; Попытка Запрос.Текст = "Уничтожить "+Строка(пИмяВремТаблицы); Запрос.Выполнить(); Исключение КонецПопытки; Запрос.Текст = "ВЫБРАТЬ * | ПОМЕСТИТЬ " + Строка(пИмяВремТаблицы) + " ИЗ &ВнешнийИсточник как ВнешнийИсточник" ; Запрос.УстановитьПараметр("ВнешнийИсточник",пТабЗнач); Запрос.Выполнить(); КонецПроцедуры |
|||
23
nop
07.12.07
✎
16:40
|
(22) согласен, это быстрее будет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |