|
Они мне предлагают алгоритм сортировки вспомнить? | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
14.02.20
✎
11:39
|
Описание:
Сортирует коллекцию в соответствии с указанными правилами сортировки. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер). Вызов метода выполняет обращение к серверу. Надо получить последние измененные 10 файлов Пишу список файлов в ТЗ СОРТИРУЮ по дате изменения получаю первые 10 казалось бы все просто ... но Описание: Сортирует коллекцию в соответствии с указанными правилами сортировки. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер). Вызов метода выполняет обращение к серверу. а вот сервер тут мне совсем не нужен... как отсортировать на клиенте? |
|||
1
vicof
14.02.20
✎
11:41
|
Ручками
|
|||
2
RomanYS
14.02.20
✎
11:43
|
Пишу список файлов в ТЗ ... как отсортировать на клиенте?
Вроде первое с последним несовместимо |
|||
3
Галахад
гуру
14.02.20
✎
11:44
|
Пузырьком? ;-)
|
|||
4
ДенисЧ
14.02.20
✎
11:44
|
(0)
"вот сервер тут мне совсем не нужен" Понимаешь ли, в чём тут дело, Пятачок... (с) 1с абсолютно пофигу, нужен ли тебе сервер или нет... |
|||
5
ДенисЧ
14.02.20
✎
11:44
|
(3) Ага. Как раз пятница...
|
|||
6
ptiz
14.02.20
✎
11:46
|
(2) Что за поток букв? Какая ТЗ на клиенте в управляемом приложении?
|
|||
7
mTema32
14.02.20
✎
11:48
|
(6) Реквизит формы.
|
|||
8
ptiz
14.02.20
✎
11:50
|
(7) Тогда на клиенте - это уже не ТЗ.
|
|||
9
pechkin
14.02.20
✎
11:50
|
юзай список.
|
|||
10
Garykom
гуру
14.02.20
✎
12:02
|
(0) Юзай массивы
|
|||
11
Garykom
гуру
14.02.20
✎
12:03
|
(0) И уточни задание, если у 20 файлов одна дата/время то какие первые 10 тебе нужны?
|
|||
12
НЕА123
14.02.20
✎
13:02
|
(0)
ну, не более 10 проходов (11)+1 |
|||
13
fisher
14.02.20
✎
13:43
|
А нафига ты их пихаешь в ТЗ на форме, чтобы отсортировать? Тебе же только последние 10 надо?
1. Создай список значений (переменную, не реквизит формы) и пихай туда ГГГГММДД в представление, а остальные данные в виде структур - в значение. 2. Сортируй по представлению 3. Первые 10 запихиваешь уже в ТЗ на форме. |
|||
14
fisher
14.02.20
✎
13:49
|
А если тебе все данные нужны в ТЗ на форме а сортировка - какая-то промежуточная опция, тогда не парься и делай штатную сортировку с серверным вызовом. На суммарном трафике между клиентом и сервером ты почти ничего не потеряешь, получишь только лишний серверный вызов. Что в худшем случае даст небольшое подтормаживание. Но если сортировка выполняется по какой-то операции пользователя, то пользователь этого подсознательно ожидает и в юзабилити ты не потеряешь.
|
|||
15
novichok79
14.02.20
✎
13:52
|
Процедура СортироватьМассивСтруктур(МассивСтруктур, Знач ИмяКлюча, ОбратнаяСортировка = Ложь) Экспорт
//пресловутая сортировка пузырьком Перем ЛевоеЗначение, ПравоеЗначение; ИмяКлюча = СокрЛП(ИмяКлюча); ДлинаМассива = МассивСтруктур.Количество(); ПорядокИзменен = Ложь; Для ПервыйСчетчик = 0 По ДлинаМассива - 1 Цикл ПорядокИзменен = Ложь; Для ВторойСчетчик = 0 По ДлинаМассива - ПервыйСчетчик - 2 Цикл ЛеваяСтруктура = МассивСтруктур.Получить(ВторойСчетчик); ПраваяСтруктура = МассивСтруктур.Получить(ВторойСчетчик + 1); Если ЛеваяСтруктура.Свойство(ИмяКлюча, ЛевоеЗначение) И ПраваяСтруктура.Свойство(ИмяКлюча, ПравоеЗначение) Тогда НадоПереставить = ?(ОбратнаяСортировка, ЛевоеЗначение < ПравоеЗначение, ЛевоеЗначение > ПравоеЗначение); Если НадоПереставить Тогда МассивСтруктур[ВторойСчетчик] = ПраваяСтруктура; МассивСтруктур[ВторойСчетчик + 1] = ЛеваяСтруктура; ПорядокИзменен = Истина; КонецЕсли; КонецЕсли; КонецЦикла; Если Не ПорядокИзменен Тогда Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
16
novichok79
14.02.20
✎
13:52
|
дарю
|
|||
17
Cthulhu
14.02.20
✎
13:52
|
(2),(6),(8):
|
|||
18
RomanYS
14.02.20
✎
13:58
|
(17) Да, обсуждали здесь когда-то. Баг это или фича не известно. Когда оно сломается тоже не угадаешь.
|
|||
19
fisher
14.02.20
✎
14:02
|
(15) Тогда уж лучше сортировка вставками. Она не сложнее, зато быстрее на частично отсортированных массивах. Ее часто используют как оптимизационную на рекурсивных сортировках, когда неотсортированными небольшие кусочки остаются элементов по десять. Или сортировку Шелла. Она еще эффективнее и не сильно сложнее. Хотя если так заморачиваться, то уже несложно будет написать и полноценную сортировку слиянием с оптимизациями. Только смысла нет никакого :)
(17) Нужно быть Чипом, чтобы юзать это в продакшене. |
|||
20
olegves
14.02.20
✎
14:04
|
(0) засунь в список значений и сортируй хот по значению, хоть по представлению
|
|||
21
acht
14.02.20
✎
14:07
|
(17) На вебклиенте упадет с "Индекс находится за границами массива".
Так чта... |
|||
22
RomanYS
14.02.20
✎
14:08
|
(21) Ты пустой тип взял, а надо с типом ТЗ.
(17) Кстати где его предлагается брать? |
|||
23
cViper
14.02.20
✎
14:08
|
(0)just google MergeSort and QuickSort
|
|||
24
acht
14.02.20
✎
14:09
|
(22) Ты попробуй-попробуй
|
|||
25
acht
14.02.20
✎
14:12
|
(22) ОписаниеТипа = Новый ОписаниеТипов("ТаблицаЗначений");
|
|||
26
novichok79
14.02.20
✎
14:14
|
(19) я не заморачивался особо, мне нужна была на клиенте сортировка. взял первое, что пришло в голову, и самое простое. а так конечно как написано в (23).
|
|||
27
RomaH
naïve
14.02.20
✎
14:15
|
в общем - список последних файлов сильно не мешающий работе
&НаКлиенте Процедура ПриОткрытии(Отказ) ПодключитьОбработчикОжидания("ПолучитьСписокПоследнихФайлов",1,ложь); КонецПроцедуры &НаСервереБезКонтекста Процедура ПолучитьСписокПоследнихФайловНаСервере(Знач МассивФайлов,СписокФайлов) ПоследниеОткрытыеФайлы = Новый ТаблицаЗначений; ПоследниеОткрытыеФайлы.Колонки.Добавить("ИмяЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ПолноеИмяЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ДатаЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ПутьДоОбъекта"); Для Каждого Ярлык Из МассивФайлов Цикл СтрокаТЗ = ПоследниеОткрытыеФайлы.Добавить(); СтрокаТЗ.ИмяЯрлыка = Ярлык.ИмяЯрлыка; СтрокаТЗ.ПолноеИмяЯрлыка = Ярлык.ПолноеИмяЯрлыка; СтрокаТЗ.ДатаЯрлыка = Ярлык.ДатаЯрлыка; СтрокаТЗ.ПутьДоОбъекта = Ярлык.ПутьДоОбъекта; КонецЦикла; ПоследниеОткрытыеФайлы.Сортировать("ДатаЯрлыка УБЫВ"); //СписокФайлов = Новый Массив; Для КоличествоФайловОфис = 0 По ПоследниеОткрытыеФайлы.Количество() - 1 Цикл Если КоличествоФайловОфис > 10 Тогда Прервать; КонецЕсли; СтрокаТЗ = ПоследниеОткрытыеФайлы[КоличествоФайловОфис]; Структура = Новый Структура("ПутьДоОбъекта,ИмяЯрлыка",СтрокаТЗ.ПутьДоОбъекта,СтрокаТЗ.ИмяЯрлыка); СписокФайлов.Добавить(Структура); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПолучитьСписокПоследнихФайлов() Shell = Новый COMОбъект("WScript.Shell"); ПутьДоЯрлыков = Shell.ExpandEnvironmentStrings("%AppData%\Microsoft\Office\Последние файлы"); ПоследниеФайлы = НайтиФайлы(ПутьДоЯрлыков,"*.lnk"); МассивФайлов = Новый Массив; Для Каждого Ярлык Из ПоследниеФайлы Цикл ЯрлыкОбъект = Shell.CreateShortcut(Ярлык.ПолноеИмя); ПутьДоОбъекта = ЯрлыкОбъект.TargetPath; РасширениеФайла = Сред(ПутьДоОбъекта,СтрНайти(ПутьДоОбъекта,".",НаправлениеПоиска.СКонца)+1); Если Не (РасширениеФайла = "doc" ИЛИ РасширениеФайла = "docx" ИЛИ РасширениеФайла = "rtf") Тогда Продолжить; КонецЕсли; Структура = Новый Структура("ИмяЯрлыка,ПолноеИмяЯрлыка,ДатаЯрлыка,ПутьДоОбъекта" ,Ярлык.ИмяБезРасширения,Ярлык.ПолноеИмя,Ярлык.ПолучитьВремяИзменения(),ПутьДоОбъекта); МассивФайлов.Добавить(Структура); КонецЦикла; МассивСпискаФайлов = Новый Массив; ПолучитьСписокПоследнихФайловНаСервере(МассивФайлов,МассивСпискаФайлов); Для КоличествоФайловОфис = 0 По МассивСпискаФайлов.ВГраница() Цикл Если КоличествоФайловОфис > 10 Тогда Прервать; КонецЕсли; СтрокаТЗ = МассивСпискаФайлов[КоличествоФайловОфис]; СтрокаСписка = СписокФайлов.НайтиПоЗначению(СтрокаТЗ.ПутьДоОбъекта); Если СтрокаСписка = Неопределено Тогда СписокФайлов.Вставить(КоличествоФайловОфис,СтрокаТЗ.ПутьДоОбъекта,СтрокаТЗ.ИмяЯрлыка,,БиблиотекаКартинок.ФорматWord); КонецЕсли; КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |