|
Удаление элементов массива | ☑ | ||
---|---|---|---|---|
0
pro3ri
25.05.15
✎
11:47
|
Доброго дня!
Удаляю элементы массива М, причем все четные добавленные элементы: Процедура Сделать(Команда) М=Новый Массив; Удаляем = Новый Массив; Для Сч = 1 по 10 Цикл М.Добавить(Сч*100); КонецЦикла; Для Сч = 1 По М.Количество() Цикл Если Сч%2 = 0 Тогда Удаляем.Добавить(Сч -1); КонецЕсли; КонецЦикла; Для Сч = 1 по Удаляем.Количество() Цикл НахождениеМаксЗн = Удаляем[Удаляем.Количество()-1]; М.Удалить(НахождениеМаксЗн); Удаляем.Удалить(Удаляем.Количество()-1); КонецЦикла; КонецПроцедуры по моему это можно сделать проще, не? |
5 13 |
||
1
cw014
25.05.15
✎
11:51
|
????
|
|||
2
cw014
25.05.15
✎
11:51
|
А нельзя с конца пробежаться по массиву и удалить все, что %2???
|
|||
3
ДенисЧ
25.05.15
✎
11:52
|
А просто добавить нужные элементы в новый массив?
|
4 6 10 12 |
||
4
cw014
25.05.15
✎
11:53
|
(3) +1
|
|||
5
ЧеловекДуши
25.05.15
✎
11:54
|
(0) Ужас, иди с конца.
Либо при удалении не двигай счетчик вперед. "Код из разряда ГУАНО.", перепиши :) ...при удалении элемента массива, все следующие по порядку, как бы сдвигаются... |
|||
6
Goggy
25.05.15
✎
11:54
|
(3) Да как ты посмел такое предложить? Надо оперативу экономить. Кризис в стране как никак...
|
7 |
||
7
ЧеловекДуши
25.05.15
✎
11:55
|
(6) В какой стране? В России нормально. :)
|
|||
8
pro3ri
25.05.15
✎
12:07
|
так заработало:
М=Новый Массив; Для Сч = 1 по 10 Цикл М.Добавить(Сч*100); КонецЦикла; А = 0; Для Сч = 1 По М.Количество() Цикл Если Сч%2 = 0 Тогда А = 1+А; М.Удалить(М.Количество()-1-А); КонецЕсли; КонецЦикла; |
|||
9
pro3ri
25.05.15
✎
12:08
|
есть более красивый вариант?
|
10 11 |
||
10
Asmody
25.05.15
✎
12:14
|
||||
11
D_E_S_131
25.05.15
✎
12:16
|
(9) Последнее время все чаще появляются такие вопросы. Может ВР-у создать раздел "Для эстетов"?
|
|||
12
fisher
25.05.15
✎
12:17
|
Уже предлагали более красивые варианты.
Самый простой и эффективный - в (3). Если таки нужен обход с конца, я типа такого пишу: Для ОтрицательныйИндекс = -М.Количество + 1 По 0 Цикл а = М[-ОтрицательныйИндекс]; КонецЦикла; |
|||
13
Timon1405
25.05.15
✎
12:17
|
(0)
Всего = М.ВГраница(); Для Сч = -Всего По 0 Цикл Если Сч%2=-1 Тогда М.Удалить(-Сч) КонецЕсли; КонецЦикла; |
|||
14
pro3ri
25.05.15
✎
12:27
|
спасибо!
|
|||
15
Asmody
25.05.15
✎
12:37
|
на 3 минуты делов:
? &НаКлиенте Процедура Команда1(Команда) Массив = МассивСлучайных(20); Сообщить("Исходный"); СообщитьМассив(Массив); Четные = МассивФильтровать(Массив, "Четное"); Сообщить("Четные"); СообщитьМассив(Четные); Нечетные = МассивФильтровать(Массив, "Нечетное"); Сообщить("Нечетные"); СообщитьМассив(Нечетные); КонецПроцедуры &НаКлиенте Процедура СообщитьМассив(Знач Масс) Для Каждого зз из Масс Цикл Сообщить(зз); КонецЦикла; КонецПроцедуры &НаКлиенте Функция МассивСлучайных(Сколько=10) _гсч=Новый ГенераторСлучайныхЧисел; _м=Новый Массив(); Для ии=1 по Сколько Цикл _м.Добавить(_гсч.СлучайноеЧисло(0,100)); КонецЦикла; Возврат _м; КонецФункции &НаКлиенте Функция МассивФильтровать(Знач Исходный, Знач ФильтрФ) _м = Новый Массив; Для Каждого зз Из Исходный Цикл Если Вычислить(ФильтрФ + "(зз)") Тогда _м.Добавить(зз); КонецЕсли; КонецЦикла; Возврат _м; КонецФункции &НаКлиенте Функция Четное(к) Возврат 0 = к % 2; КонецФункции &НаКлиенте Функция Нечетное(к) Возврат 1 = к % 2; КонецФункции |
16 18 |
||
16
D_E_S_131
25.05.15
✎
12:39
|
(15) Вот она истинная красота!
|
|||
17
fisher
25.05.15
✎
12:40
|
Подчеркивания глаза режут. В чем их смысл?
|
18 22 |
||
18
1Сергей
25.05.15
✎
12:41
|
20 |
|||
19
fisher
25.05.15
✎
12:42
|
И насчет "Знач" и Вычислить() - я бы не стал.
|
21 |
||
20
fisher
25.05.15
✎
12:49
|
(18) Как в том анекдоте, чтобы руку не сбивать? :)
|
15 |
||
21
Asmody
25.05.15
✎
12:50
|
(19) В чем проблема со Знач?
А Вычислить() — ну нельзя в 1С саму функцию передать, приходится выворачиваться. А это хоть и кривой, но самый быстрый и понятный способ реализации. |
23 |
||
22
D_E_S_131
25.05.15
✎
13:44
|
(17) Еще один эстет?
|
23 |
||
23
fisher
25.05.15
✎
14:32
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |