Имя: Пароль:
1C
1С v8
Сортировать массив, сравнивая 4ре числа
, ,
0 Pentosh
 
24.09.15
16:06
Доброго времени суток.

Не могу сообразить, а сделать надо.
Нужно отсортировать массив по возрастанию, он заполнен характеристиками номенклатуры, вида "720, 600, 89, белый".
Мну нужно, взять первые 2 числа, и по ним отсортировать.
Чтобы:
Это 720 240   стало 250 150
    1350 720        460 240
    250 150         720 240
    900 600         720 600
    720 600         900 600
    460 240         1350 720

Вот все ни как не могу понять, как сортировать по 2м значениям.
1 butterbean
 
24.09.15
16:10
делай таблицу с числовыми колонками, ее потом сортируй
2 Pentosh
 
24.09.15
16:29
(1) Как вариант возможно.

А если именно используя массив и сортировку "от руки"?
3 Pentosh
 
24.09.15
16:47
Мин = 0;
        Для i = 0 По МассивХарактеристик.ВГраница() Цикл        
            Мин = i;                              
            Для j = i + 1 ПО МассивХарактеристик.ВГраница() Цикл        //Ищем минимальный элемент в массиве
                
                ХарШиринаЧислоМассив1 = ПолучитьЧислоХарактеристикиШирина(МассивХарактеристик[Мин].НаименованиеХарактеристики);
                ХарДлинаЧислоМассив1 = ПолучитьЧислоХарактеристикиДлина(МассивХарактеристик[Мин].НаименованиеХарактеристики);
                ХарШиринаЧислоМассив2 = ПолучитьЧислоХарактеристикиШирина(МассивХарактеристик[j].НаименованиеХарактеристики);
                ХарДлинаЧислоМассив2 = ПолучитьЧислоХарактеристикиДлина(МассивХарактеристик[j].НаименованиеХарактеристики);
                
                Если ХарШиринаЧислоМассив2 <= ХарШиринаЧислоМассив1 И ХарДлинаЧислоМассив2 <= ХарДлинаЧислоМассив1 Тогда
                        
                    Мин = j;
                        
                КонецЕсли;
            КонецЦикла;
            Если МассивХарактеристик[Мин] = МассивХарактеристик[i] Тогда           //Если мин. элемент массива = первому элементу неотс. части массива, то пропускаем.
                Продолжить;
            КонецЕсли;
            
            Смена = МассивХарактеристик[i];                            //Производим замену элементов массива.
            МассивХарактеристик[i] = МассивХарактеристик[Мин];
            МассивХарактеристик[Мин] = Смена;
        КонецЦикла;


Вроде хорошо, но не совсем
720 2500
1450 600
1450 900
2040 600
2040 600
1450 2500
Вот так получается в итоге.
4 Pentosh
 
24.09.15
16:51
(1) Попробовал, вытащил числа их характеристики и записал их в ТЗ, получилось не то что хотел, по 1-й колонке нормально отсортировал, по 2-й нет.
5 DTXyupyup
 
24.09.15
16:54
(3) Ужс
(4) Показывай как вытаскиваешь. Все же просто должно быть. Сортируешь как?
6 Pentosh
 
24.09.15
17:14
(5) А что там ужасного то?)

В запросе, Левым соединением цеплял РС Значения свойств, вледелец характеристика и от туда свойство Ширина и Длина брал.
Сортировал "УПОРЯДОЧИТЬ ПО Ширина, Длина"
Пробовал и ТЗ с результатом, то тож не то дало.
7 Garykom
 
гуру
24.09.15
17:19
(0) невозможно "сортировать по 2м значениям"

можно по очереди сначала по одному отсортировать, потом по другому

или можно взять некую функцию от этих двух значений, получить 3-е значение, и отсортировать по нему
8 DTXyupyup
 
24.09.15
17:26
(6) Не понял. Сортировка ТЗ платформы не работает должным образом?
И да, каким образом ты по двум значениям хочешь сортировать?
9 Pentosh
 
25.09.15
08:14
(8) Так в этом и вопрос, что нужно по двум, вот и пытаюсь найти способ.

Стандартные сортируют так:
По наименованию
1200 1200
1400 2500
1300 600
2080 600
240  50
250  400
720  600

По числам
240  50
250  400
720  600
1200 1200
1300 600
2080 600
1400 2500

как то так:) (примерно передал)
10 Апош
 
25.09.15
08:16
спорим, ты взял массив оттуда, где тебе отсортируют правильно без извращений?
11 Pentosh
 
25.09.15
09:27
(10) Да, так и есть, видать тупняк напал, частенько такое бывает :)

Проблема решена, можно расходится. Спасибо