|
Минимальное значение | ☑ | ||
---|---|---|---|---|
0
lirt82
14.03.12
✎
13:35
|
всем привет.
Не могу понять как в Таблице значений найти минимальное значение, тоесть : Таблица значений 3 на 3 к примеру 4 6 9 5 2 3 8 7 10 Вот что бы цифру 2 найти. Спасибо всем заранее))) |
|||
1
hhhh
14.03.12
✎
13:37
|
ну как в других местах ищете, так и здесь. В чем прикол?
|
|||
2
vmv
14.03.12
✎
13:39
|
(1) тебе запросом чтобы все была крута или как ребитищки - поиском?
|
|||
3
lirt82
14.03.12
✎
13:39
|
ТаблицаЗначений называется ТЗ
Работаю с табличной частью, и функиция МинимальноеЧисло мин (ТЗ); не проходит) |
|||
4
vmv
14.03.12
✎
13:40
|
даю новодку
ПОМЕСТИТЬ ТЗ МИНИМУМ |
|||
5
Галахад
гуру
14.03.12
✎
13:40
|
Цикл по колонкам.
В цикле. Сортировка. Запомнить минимум. |
|||
6
Rebelx
14.03.12
✎
13:41
|
сортировать
взять первую строку |
|||
7
lirt82
14.03.12
✎
13:43
|
Спасибо)) поробую)
|
|||
8
vmv
14.03.12
✎
13:44
|
я вот сваяло запросец, пользуйтесь, как поместить Тз во временную не проблемо
"ВЫБРАТЬ | МИНИМУМ(Тз.ЗначениеЧисло) КАК МинимальноеЧисло |ИЗ | Тз КАК Тз | |СГРУППИРОВАТЬ ПО | Тз.ЗначениеЧисло" |
|||
9
vmv
14.03.12
✎
13:47
|
так кручи
ВЫБРАТЬ | МИНИМУМ(Тз.*) КАК МинимальноеЧисло |ИЗ | Тз КАК Тз | |СГРУППИРОВАТЬ ПО | Тз.ЗначениеЧисло" |
|||
10
vmv
14.03.12
✎
13:48
|
конечный вариант
"ВЫБРАТЬ | МИНИМУМ(Тз.*) КАК МинимальноеЧисло |ИЗ | Тз КАК Тз" |
|||
11
lirt82
14.03.12
✎
14:27
|
круто)) пасибо) ну а без запроса? мне вариант без запроса нужен)
|
|||
12
ShoGUN
14.03.12
✎
14:31
|
(11) Отсортировать по очереди по каждой колонке, взять на каждом шаге значение из первой строки и запихать его в список значений. Список значений тоже отсортировать и взять первое значение.
|
|||
13
ShoGUN
14.03.12
✎
14:32
|
+(12) Хотя не факт, что перечисленное будет сильно быстрее перебора...
|
|||
14
Kreont
14.03.12
✎
14:36
|
+ еще один самый быстрый вариант :)
Во время внесения/заполнения ТЗ сразу запоминать минимальное значение в отдельной переменной. |
|||
15
marvak
14.03.12
✎
14:39
|
(11) по очереди выгружаешь колонки в список значений, полученный список сортируешь по убыванию, берешь первый элемент, его заносишь в отдельный список.
потом отдельный список сортируешь по убыванию, и вуаля. |
|||
16
marvak
14.03.12
✎
14:39
|
(12)
:) одинаково думаем |
|||
17
lirt82
14.03.12
✎
14:44
|
а можно если не сложно обозначить небольшим наглядным примером ?:-)
|
|||
18
ShoGUN
14.03.12
✎
14:55
|
(17) СписокМинимальных = Новый СписокЗначений;
Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл ТЗ.Сортировать(КолонкаТЗ.Имя); СписокМинимальных.Добавить(ТЗ[0][ТЗ.Колонки.Индекс(КолонкаТЗ)]); КонецЦикла; СписокМинимальных.СортироватьПоЗначению(); МинимальноеЗначение = СписокМинимальных[0].Значение; Это по-моему, с сортировкой ТЗ в целом. Можно выгружать каждую колонку в свой список, а список уже сортировать, но имхо особой разницы в производительности не будет. |
|||
19
Omskdizel
14.03.12
✎
14:57
|
(18) Кстати не факт, что тупой перебор всех значений будет не быстрее. Ибо проход то один будет.
|
|||
20
ShoGUN
14.03.12
✎
14:58
|
(19) Я о том же в (13).
|
|||
21
Omskdizel
14.03.12
✎
14:59
|
(20) Пардон, пропустил
|
|||
22
marvak
14.03.12
✎
15:00
|
(17)
ВремСписок = Новый СписокЗначений(); ВремСписок1 = Новый СписокЗначений(); Для каждого Колонка Из ТЗ.Колонки Цикл ВремСписок.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку(Колонка.Имя)); ВремСписок.СортироватьПоЗначению(); ВремСписок1.ДобавитьЗначение(ВремСписок[0]); КонецЦикла ВремСписок1.СортироватьПоЗначению(); //ВремСписок1[0] тут минимальное значение |
|||
23
Omskdizel
14.03.12
✎
15:01
|
А интересно прогнать на большом массиве и сравнить по скорости...
Если еще и количество колонок фиксированное, то можно через Мин() замутить |
|||
24
marvak
14.03.12
✎
15:01
|
(22)+
пардон, ВремСписок1.ДобавитьЗначение(ВремСписок[0].Значение); |
|||
25
Kreont
14.03.12
✎
15:07
|
Мин = ТЗ[0][0];
Для каждого а из ТЗ Цикл Для каждого б из а Цикл Мин = Мин(б,Мин); КонецЦикла; КонецЦикла; |
|||
26
Kreont
14.03.12
✎
15:09
|
+(25) Сообщить(Мин); //:)))
|
|||
27
ShoGUN
14.03.12
✎
15:31
|
Ща выясним, я уже код накатал. Нашел у (22) две синтаксические ошибки :)
|
|||
28
lirt82
14.03.12
✎
15:36
|
ВСЕМ СПАСИБО ЗА ПРОДЕЛАННУЮ РАБОТУ) пробую
|
|||
29
vmv
14.03.12
✎
15:43
|
запрос на больших Тз все-равно вздует
|
|||
30
ShoGUN
14.03.12
✎
15:44
|
Таблица значений - реквизит формы, 1000 строк на 1000 колонок, заранее заполнена случайными значениями от 0 до 1000000
Способ 1, сортировка ТЗ с последующей сортировкой списка полученных минимальных значений. Способ 2, выгрузка каждой колонки в список значений с последующей сортировкой и далее как в способе 1. Способ 3, Тупой полный перебор. Результаты стандартным замером производительности у меня получились такие: Способ 1: 6,620962 Способ 2: 10,857994 Способ 3: 15,501282 Правда в способе 2 в реализации (22) тормозит ВремСписок.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку(Колонка.Имя)); Правильней наверное: ВремСписок = ТЗ.ВыгрузитьКолонку(Колонка.Имя); Ща проверю. |
|||
31
ShoGUN
14.03.12
✎
15:46
|
(29) Напиши готовую процедуру, я померяю.
|
|||
32
ShoGUN
14.03.12
✎
15:48
|
Тьфу ты, ТЗ.ВыгрузитьКолонку(Колонка.Имя); массив возвращает...
Значит пока таблица значений рулит, список значений очень тормозной на создании элементов. |
|||
33
lirt82
14.03.12
✎
16:00
|
Мин = ТЗ[0][0];
Для каждого а из ТЗ Цикл Для каждого б из а Цикл Мин = Мин(б,Мин); КонецЦикла; КонецЦикла; постоянно пишет 1, даже если ТЗ [2][1] укажешь где вбиваешь цирфу точно не 1) |
|||
34
Галахад
гуру
14.03.12
✎
16:04
|
МинЗн = Мин(б,МинЗн)
|
|||
35
lirt82
14.03.12
✎
16:10
|
всё рвоно 1 пишет)
|
|||
36
lirt82
14.03.12
✎
16:12
|
Конечно я понимаю что ТЗ[0][0] это номер строки, и она там постоянно 1 стоит)ну если поменять к примеру на ТЗ [0][1] то всё ровно 1 даёт, иль я чего не понимаю?)
|
|||
37
Галахад
гуру
14.03.12
✎
16:15
|
Для каждого а из ТЗ.колонки Цикл
|
|||
38
lirt82
14.03.12
✎
16:23
|
{Форма.Форма.Форма(39)}: Итератор для значения не определен
Для каждого б из а Цикл |
|||
39
lirt82
14.03.12
✎
16:25
|
ещё есть вещь у меня выгружена
ТЗ = Цифры.Выгрузить(); что бы много не прописывать) |
|||
40
lirt82
14.03.12
✎
16:27
|
ну это так)) просто
|
|||
41
Галахад
гуру
14.03.12
✎
16:27
|
(39) Не парься. Скопируй (18)
|
|||
42
lirt82
14.03.12
✎
16:30
|
я с сортировкой ещё плохо знаком) не работал практически
|
|||
43
МихаилМ
14.03.12
✎
16:34
|
на больших тз запрос и скд проиграют
тк они исползуеют сохранение в промежуточный файл. проверялось на 8.1 |
|||
44
lirt82
14.03.12
✎
16:34
|
(18)
там ошибка {Форма.Форма.Форма(56)}: Метод объекта не обнаружен (ДобавитьЗначение) ВремСписок1.ДобавитьЗначение(ВремСписок[0]); |
|||
45
ShoGUN
14.03.12
✎
16:35
|
(44) У меня в (18) нет такой строчки.
|
|||
46
lirt82
14.03.12
✎
16:37
|
уже уидел поправку
|
|||
47
Kreont
14.03.12
✎
16:39
|
Код в (25) рабочий 100%, а насчет (33) может 1 и есть минимум
|
|||
48
Reset
14.03.12
✎
16:42
|
(25) рабочий, подтверждю ;)
|
|||
49
Kreont
14.03.12
✎
16:44
|
(36) ТЗ[0][0] - это получение значения из первой строки первой колонки
|
|||
50
lirt82
14.03.12
✎
16:45
|
код 25 выдаёт постоянно 1!
33 тот же код, 1 выдаёт) |
|||
51
Reset
14.03.12
✎
16:45
|
(50) А если руки помыть, а потом копипастить? ;)
|
|||
52
Kreont
14.03.12
✎
16:49
|
(50) в таблице 100% только числа?
|
|||
53
lirt82
14.03.12
✎
16:54
|
да, толко чилса
|
|||
54
lirt82
14.03.12
✎
16:58
|
Цифры это табличная часть в три столба ну а строк по желаению)
ТЗ = Цифры.Выгрузить(); Мин = ТЗ[0][0]; Для каждого а из ТЗ Цикл Для каждого б из а Цикл Мин = Мин(б,Мин); КонецЦикла; КонецЦикла; |
|||
55
lirt82
14.03.12
✎
16:58
|
и постоянно 1
|
|||
56
КМ155
14.03.12
✎
17:00
|
(55) поставить точку останова и посмотреть в цикле а и б слабо ?
|
|||
57
Reset
14.03.12
✎
17:05
|
(56) Он даже еще не опроверг версию в (47). Поди есть "1" в его табличной части. Все просто поди)
|
|||
58
lirt82
14.03.12
✎
17:07
|
Просто я чего то не догоняю))
|
|||
59
lirt82
14.03.12
✎
17:59
|
НЕт КМI55 не слабо. Как обойти 1ку, кторая как я понимаю в номере строки сидит) 1ый номер строки иль не прав?
|
|||
60
Kreont
14.03.12
✎
18:05
|
нет(59)
Добавь всередину: ... Мин = Мин(б,Мин); Если б = 1 Тогда Сообщить("Обана, а 1-ца есть"); КонецЕсли; ... или просто визуально, посмотреть нет ли там 1-ки: ТЗ.ВыбратьСтроку() |
|||
61
Reset
14.03.12
✎
18:08
|
ТЗ = Цифры.Выгрузить();
ТЗ.Колонки.Удалить(0); // <--- Это добавить |
|||
62
Reset
14.03.12
✎
18:08
|
(61) к (59) Прав, чертяка
|
|||
63
hhhh
14.03.12
✎
18:10
|
(59) вот это что за фигня? Для каждого б из а Цикл
|
|||
64
Reset
14.03.12
✎
18:11
|
Или внутренний цикл (по б) несколько усложнить на вид:
Для Индекс=1 по ТЗ.Колонки.Количество()-1 цикл Мин=мин(а[Индекс],Мин); |
|||
65
Reset
14.03.12
✎
18:18
|
Вообще, если в ТЧ _фиксировано_ три колонки, я б не стал выделываться с универсальностью и выгрузками.
Т.е. Мин=ТЧ[0].Имя1; Для каждого СтрокаТЧ из ТЦ цикл Мин=Мин(Мин,СтрокаТЧ.Имя1,СтрокаТЧ.Имя2,СтрокаТЧ.Имя3); КонецЦикла; |
|||
66
Kreont
14.03.12
✎
18:28
|
(62) ЧЯДНТ?
Написал обработку, почему у меня 1-ца не пащет? Процедура КнопкаВыполнитьНажатие(Кнопка) ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Сум"); ТЗ.Колонки.Добавить("Сум2"); Нов = ТЗ.Добавить(); Нов.Сум = 5; Нов.Сум2 = 3; Нов = ТЗ.Добавить(); Нов.Сум = 7; Нов.Сум2 = 9; Нов = ТЗ.Добавить(); Нов.Сум = 9; Нов.Сум2 = 6; Мин = ТЗ[0][0]; Для каждого а из ТЗ Цикл Для каждого б из а Цикл Мин = Мин(б,Мин); КонецЦикла; КонецЦикла; Сообщить(Мин); КонецПроцедуры |
|||
67
Kreont
14.03.12
✎
18:29
|
+(66) ответ = 3, как и должно
|
|||
68
Kreont
14.03.12
✎
18:31
|
(63) Обход СтрокаТаблицыЗначений
|
|||
69
ShoGUN
14.03.12
✎
19:25
|
Факинг шит, в (18) рабочий код без всяких переборов, а они тут перебор ковыряют...
|
|||
70
Reset
14.03.12
✎
20:57
|
(66) Ты обходишь свою созданную ТЗ, а автор выгружает ее из ТЧ, т.е. кроме своих колонок получает внагрузку колонку с номером строки.
|
|||
71
Reset
14.03.12
✎
21:11
|
(69) см (13) :)
На маленьких таблицах перебор, имхо, шустрее(об заклад биться не буду). На больших - хз, проверять лень, ибо задача какая-то надуманная. Если бы вдруг дошло до больших таблиц на практике, я наверняка решал бы запросом (не передавая таблицу в параметр, а прямо по бд). А так - почему бы не пописать в форум простенькие циклы для развлечения? Я, может, так расслабляюсь :) |
|||
72
hhhh
14.03.12
✎
23:14
|
(69) всё-таки сортировка в цикле это как запрос в цикле.
|
|||
73
lirt82
15.03.12
✎
09:34
|
Всем спасибо)) всё работает)
|
|||
74
Omskdizel
15.03.12
✎
09:48
|
Если кому не лень - прогоните через Мин(), если учесть, что количество колонок в ТЗ например строго 5. Т.е. когда один цикл достаточно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |