|
Как вы думаете какой код лучше? | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
xReason
11.12.13
✎
22:01
|
Как вы думаете какой код лучше?
Вариант 1 ------------------ Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт Результат = ""; Для Каждого Элемент Из Структура Цикл СимволРазделителя = ?(ПустаяСтрока(Результат), "", Разделитель); Результат = Результат + СимволРазделителя + Элемент.Ключ; КонецЦикла; Возврат Результат; КонецФункции Вариант 2 ----------------- Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт Результат = ""; Для Каждого Элемент Из Структура Цикл Результат = Результат + Элемент.Ключ + СимволРазделителя; КонецЦикла; Возврат Лев(Результат,СтрДлина(Результат)-1); КонецФункции PS Подразумеваем, что Структура всегда имеет минимум 1 значение |
||||||||||
1
ДенисЧ
11.12.13
✎
22:03
|
экви... ну понимаешь
|
||||||||||
2
фобка
11.12.13
✎
22:04
|
первый, ибо он по смыслу написан, а не по результату, поэтому его проще понять
Вариант 1 |
||||||||||
3
Eugeneer
11.12.13
✎
22:04
|
автор чекнутый ботан?
|
||||||||||
4
xReason
11.12.13
✎
22:07
|
(3) Автор тут уже какой год сидит и темы у него разнообразные ))0
|
||||||||||
5
фобка
11.12.13
✎
22:08
|
хотя, с другой стороны, пофиг
Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт Результат = ""; Для Каждого Элемент Из Структура Цикл Результат = Результат + ?(ПустаяСтрока(Результат), "", Разделитель) + Элемент.Ключ; КонецЦикла; Возврат Результат; КонецФункции Свой вариант |
||||||||||
6
xReason
11.12.13
✎
22:12
|
(5) но в каждой итерации делать проверку на условие, это же медленная операция
|
||||||||||
7
фобка
11.12.13
✎
22:13
|
(6) у тебя миллион итераций? нет? тогда плевать
|
||||||||||
8
serffer
11.12.13
✎
22:18
|
у 1 читабельность лучше, но в цикле больше операций - плохо на больших объемах
Вариант 2 |
||||||||||
9
xReason
11.12.13
✎
22:18
|
(7) " Но каждый грамм метала должен чувствовать в себе сталь.
Мы в любой заготовке обязаны увидеть деталь." ну или - копейка рубль бережет А вдруг вот жизнь подкинет массив с миллионом |
||||||||||
10
фобка
11.12.13
✎
22:27
|
(9) ну, вот, как подкинет - так и оптимизируешь)
Но ты прав, всё начинается с малого - задумайся об этом, читая в очередной раз чужой код или создавая свой новый быстрый.. имхо, лучше по потребностям и без излишней хитрости по мелочам |
||||||||||
11
Лефмихалыч
11.12.13
✎
22:30
|
Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт
Результат = ""; Для Каждого Элемент Из Структура Цикл Результат = Результат + Символы.ПС + Элемент.Ключ; КонецЦикла; Результат = СтрЗаменить(СокрЛП(Результат), Символы.ПС, Разделитель); Возврат Результат; КонецФункции Свой вариант |
||||||||||
12
Лефмихалыч
11.12.13
✎
22:33
|
первый вариант однозначно хуже всех остальных, т.к. у него цикломатическая сложность самая большая.
Второй вариант плох тем, что там волшебные числа. |
||||||||||
13
фобка
11.12.13
✎
22:35
|
(11) СокрЛП() убирает табуляцию?
|
||||||||||
14
Arh01
11.12.13
✎
22:37
|
(0) во 2 варианте ошибка.
|
||||||||||
15
Лефмихалыч
11.12.13
✎
22:39
|
(13) да. Но ПС - не табуляция
|
||||||||||
16
фобка
11.12.13
✎
22:39
|
+13 даже если убирает, все равно не универсально, если в строке таб окажется
|
||||||||||
17
фобка
11.12.13
✎
22:40
|
(15) ок
|
||||||||||
18
Лефмихалыч
11.12.13
✎
22:40
|
(16) откуда он там окажется?
|
||||||||||
19
Лефмихалыч
11.12.13
✎
22:42
|
+(14) кстати, да
КлючиСтруктурыВСтроку(Структура, "Вариант 2 - гогно") |
||||||||||
20
xReason
11.12.13
✎
22:44
|
прогнал тест на 100 тыс записей
вариант 1 - 263 сек вариант 2 - 273 сек |
||||||||||
21
xReason
11.12.13
✎
22:44
|
(14) Ошибку видел, считай, что там правильное название переменной
|
||||||||||
22
фобка
11.12.13
✎
22:46
|
(18) в тексте не может быть перевода строки?)
(19) там еще и по синтаксису очепятка) |
||||||||||
23
Лефмихалыч
11.12.13
✎
22:47
|
(21) в функцию во втором параметре могут передать больше одного символа. Там две стрдлины надо, чтобы правильно работало.
(22) в какой версии платформы ключ структуры может содержать табуляцию? Или лучше спросить - в какой параллельной вселенной? |
||||||||||
24
xReason
11.12.13
✎
22:48
|
(21) Окей принимается, но вопрос был о другом
|
||||||||||
25
xReason
11.12.13
✎
22:49
|
это для (23) написал
|
||||||||||
26
фобка
11.12.13
✎
22:50
|
(23) точно, тут же "Элемент.Ключ", убедил
|
||||||||||
27
Лефмихалыч
11.12.13
✎
22:51
|
(24) вот тут развернутый ответ (12)
|
||||||||||
28
фобка
11.12.13
✎
22:51
|
(20) круто, теперь сделай структуру из 10+ ключей
|
||||||||||
29
xReason
11.12.13
✎
23:02
|
вариант в (5) -285 сек
вариант 1 - 283 сек фигня какая-то по сути можно сказать, что одинаково Проблема скорее всего упирается в конкатенацию строка Результат. Она становиться очень большой и из-за нее все тормоза |
||||||||||
30
фобка
11.12.13
✎
23:09
|
(29) у тебя структура из 100к ключей или 100к вызовов функции?
|
||||||||||
31
Salimbek
11.12.13
✎
23:16
|
Как-то так:
|
||||||||||
32
Salimbek
11.12.13
✎
23:16
|
+ голосовалка
Свой вариант |
||||||||||
33
Одесса
11.12.13
✎
23:26
|
Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт
Результат = ""; СимволРазделителя = ""; Для Каждого Элемент Из Структура Цикл Результат = Результат + СимволРазделителя + Элемент.Ключ; СимволРазделителя = Разделитель; КонецЦикла; Возврат Результат; КонецФункции |
||||||||||
34
МишКа
11.12.13
✎
23:27
|
(0) Один код не может быть лучше другого, по определению.
|
||||||||||
35
Eugeneer
11.12.13
✎
23:31
|
в строну внутр и из строки внутре видимо никого в этой теме не учили. какие то дурацкие фиклы по массиву с разделителями.
|
||||||||||
36
Eugeneer
11.12.13
✎
23:32
|
+(35) программисты фиговы.
|
||||||||||
37
Мимохожий Однако
11.12.13
✎
23:33
|
(36)Продемонстрируй класс. Выдай свой вариант.
|
||||||||||
38
Eugeneer
11.12.13
✎
23:33
|
даже пилять в сабже тупой код в обоих вариантах
|
||||||||||
39
Eugeneer
11.12.13
✎
23:34
|
(37) синтаксис открой неуч.
|
||||||||||
40
Eugeneer
11.12.13
✎
23:34
|
ЗначениеВСтрокуВнутр
ЗначениеИзСтрокиВнутр две строчки кода. |
||||||||||
41
Мимохожий Однако
11.12.13
✎
23:35
|
А как быть с разделитель. Например ";"?
|
||||||||||
42
Одесса
11.12.13
✎
23:36
|
(31) Опередил
(34) Как это не может? Скажи еще, что гуавнокода не бывает. А так-то, у каждого додика своя методика. Поэтому Свой вариант |
||||||||||
43
Eugeneer
11.12.13
✎
23:36
|
Всех кто в этой теме двоешники, кроме естественно меня, как настоящего пропитанного 1Ска.
|
||||||||||
44
Мимохожий Однако
11.12.13
✎
23:37
|
(39)"хамишь, парниша"
(43)слифффф |
||||||||||
45
МишКа
11.12.13
✎
23:38
|
(43) Ничо, что у тебя результат немного другой, чем в сабже?
|
||||||||||
46
Eugeneer
11.12.13
✎
23:38
|
(44) ну я так и знал что все сольетесь как я прийду и покажу всего две строчки кода.
|
||||||||||
47
Одесса
11.12.13
✎
23:38
|
(43) Знаем, знаем, "Одна я умная, в белом пальто стою красивая"
|
||||||||||
48
Eugeneer
11.12.13
✎
23:39
|
(45) а ты мозг свой включи. Нафига ему нужна эту функция.
Ответ просто - чтобы потом еще иметь другую функцию которая это считает обратно. |
||||||||||
49
Мимохожий Однако
11.12.13
✎
23:39
|
Перенедопил. ИМХО.
|
||||||||||
50
Eugeneer
11.12.13
✎
23:40
|
Скорее всего автор пытается в строку запихнуть структуру не ведаю про СтрокуВнтур, скорее всего пытается изобрести сохранение настроек.
И так же обратно потом будет мозг делать чтобы эту строку разобрать обратно. |
||||||||||
51
МишКа
11.12.13
✎
23:41
|
(42) Вот так вот - не может. Одна воля ничуть не лучше и не хуже другой воли.
Твоя эффективность определяется не тем, какой код ты пишешь. А тем, можешь ли ты здесь и сейчас написать код и сколько времени у тебя это займет. |
||||||||||
52
Мимохожий Однако
11.12.13
✎
23:41
|
(50)Гадать можно и на кофейной гуще, а ответить конкретным кодом не получается.
|
||||||||||
53
МишКа
11.12.13
✎
23:43
|
(48) Эта функция ему нужна, чтобы задать вопрос на мисте.
Это же очевидно. |
||||||||||
54
Eugeneer
11.12.13
✎
23:44
|
Я не вижу никаких других дурацких задач шде бы из структуры нужно было сделать строку с разделителями строк. Да еще в ракурсе какого то ключа.
Поэтому вы все и двоешники. И двешники потому что: КолВсего = Структура.Количество(); Сч = 0; Результат = ""; Для Каждого Элемент Из Структура Цикл Сч = Сч+1; Если Сч = КолВсего Результат = Результат + Элемент.Ключ; Иначе Результат = Результат + Элемент.Ключ + СимволРазделителя; КонецЕсли; КонецЦикла; |
||||||||||
55
х86
11.12.13
✎
23:46
|
(54)бггг
|
||||||||||
56
Мимохожий Однако
11.12.13
✎
23:47
|
(54)"СтрокуВнтур" забыл?
|
||||||||||
57
Eugeneer
11.12.13
✎
23:50
|
(56) это вообще верхсупермегабыстрый метод 1С. я бы сказал это самый крутой встроенный метод 1С
|
||||||||||
58
Eugeneer
11.12.13
✎
23:50
|
во все времена
|
||||||||||
59
Eugeneer
11.12.13
✎
23:50
|
он творит чудаса
|
||||||||||
60
Eugeneer
11.12.13
✎
23:52
|
неправильно выразился: это самый крутой метод 1С из всей 1С вместе взятой.
|
||||||||||
61
Шурик71
11.12.13
✎
23:54
|
извращенцы, блин.
я использую в зависимости от фазу луны вариант 2 и тот, который похож на (5), только используя сред(Результат,2). При этом это не имеет совсем никакого значения. И пох на разницу в 0,01 мс. Ибо итераций < 100000000. И в 50% случаев прав (40), ибо с вероятностью 50% применимо (48). Но жизнь все же многообразней, поэтому только 50% за этот вариант. |
||||||||||
62
ivanovnm
12.12.13
✎
00:00
|
(40) Не взлетит если структуру заполнить, а она на 99,999% будет заполнена
|
||||||||||
63
ivanovnm
12.12.13
✎
00:02
|
(0) Сейчас вечером, в пледе, после горячего чая можно решать что быстрее, а за 2 часа до окончания рабочего дня оба метода будут одинаково эффективны.
|
||||||||||
64
ivanovnm
12.12.13
✎
00:04
|
(0) Только можно поправить
... Результат = Разделитель + Результат + Элемент.Ключ; .... Возврат Сред(Результат, 2); .... Вариант 2 |
||||||||||
65
ivanovnm
12.12.13
✎
00:06
|
(64) Результат = Результат + Разделитель + Элемент.Ключ;
|
||||||||||
66
Eugeneer
12.12.13
✎
00:07
|
(64) - (54) не пробовал посмотреть?
|
||||||||||
67
Eugeneer
12.12.13
✎
00:09
|
могу даже красивее нарисовать из (54) если кому не нравиться!
КолВсего = Структура.Количество(); Сч = 0; Результат = ""; Для Каждого Элемент Из Структура Цикл Сч = Сч+1; Результат = Результат + Элемент.Ключ + ?(Сч = КолВсего,"",СимволРазделителя); КонецЦикла; |
||||||||||
68
ivanovnm
12.12.13
✎
00:19
|
(67) "Сч = Сч+1;" и "?(Сч = КолВсего,"",СимволРазделителя)" лишние
|
||||||||||
69
Classic
12.12.13
✎
00:32
|
(60)
Самый крутой это ЗаполнитьЗначенияСвойств() |
||||||||||
70
Classic
12.12.13
✎
00:33
|
(31)
Вот оно |
||||||||||
71
Classic
12.12.13
✎
00:34
|
(48)
Или передать в другую программу. Но ты, как истинный одинэсник, отрицаешь существование других программ. Ибо ересь |
||||||||||
72
ivanovnm
12.12.13
✎
00:44
|
(71) ибо зоопарк
|
||||||||||
73
xReason
12.12.13
✎
01:08
|
все спасибо, вот такая миста мне нравится
Eugeneer - получает отедбный приз - плесневелую коробку 1С 7.7 ЗаполнитьЗначенияСвойств - отличный метод, но всегда страшно, как оно там работает |
||||||||||
74
МихаилМ
12.12.13
✎
01:59
|
Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт
Перем Счётчик; Результат = ""+Структура[0].Ключ; Для Счётчик = 1 по Структура.Количество() Цикл Результат = Результат + СимволРазделителя + Структура[Счётчик].Ключ; КонецЦикла; Возврат Результат; КонецФункции Свой вариант |
||||||||||
75
Dethmont
12.12.13
✎
02:19
|
(74) Вывалиться с ошибкой без минус 1
(74)+ Свой вариант |
||||||||||
76
programmist1cswworld
12.12.13
✎
06:33
|
(0) у меня такой код программа пишет
|
||||||||||
77
xReason
12.12.13
✎
07:15
|
(74)
Перем Счётчик; // - привет мамонтам ))) |
||||||||||
78
dauster
12.12.13
✎
07:30
|
(74) и давно к элементам структуры можно стало обращаться по индексу?
|
||||||||||
79
vde69
модератор
12.12.13
✎
08:16
|
мой вариант,
1. пофиг на размерность структуры (отображает корректно пустую) 2. возможен разделитель из нескольких символов 3. быстрый ----------------- Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт СимволРазделителя = ?(ПустаяСтрока(Результат), "", Разделитель); Результат = СимволРазделителя; Для Каждого Элемент Из Структура Цикл Результат = Результат + Элемент.Ключ + СимволРазделителя; КонецЦикла; Возврат Сред(Результат,СтрДлина(СимволРазделителя)+1); КонецФункции |
||||||||||
80
vde69
модератор
12.12.13
✎
08:17
|
(79)+
Свой вариант |
||||||||||
81
Wasya
12.12.13
✎
08:20
|
Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт
Результат = ""; Для Каждого Элемент Из Структура Цикл Результат = Результат + Разделитель + Элемент.Ключ; КонецЦикла; Возврат Сред(Результат,2); КонецФункции |
||||||||||
82
dmpl
12.12.13
✎
08:35
|
(0) Из представленных 2 - первый, т.к. корректно отработает при любой длине разделителя. А так - я использую флаг ЭтоПерваяИтерация - с ним быстрее будет, чем с определением, пустая ли строка.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |