Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.02.2015
Сообщений: 45
1

Как сортировать список?

05.09.2015, 14:23. Показов 1062. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток,
Подскажите., пожалуйста, каким методом лучше сортировать список. Кроме методов removeat и reverse ни с чем не сталкивался, поэтому прошу объяснить по-проще, пожалуйста.

В процессе создается массивы:
C#
1
2
3
4
5
6
7
double[] BLdata = new double[6]; 
BLdata[0] =ID;
BLdata[1] =X;
BLdata[2] =Y;
BLdata[3] =Z;
BLdata[4] =XYZ; //может принимать значения 0,1,2 соответственно
BLdata[5] =LR; // может принимать значения 0 или 1
И каждый массив добавляется в список:
C#
1
2
List<double[]> BL = new List<double[]>(); 
BL.Add(BLdata);
Затем необходимо отсортировать список по параметрам XYZ и LR. (Что-то вроде того BLdata[4] =0, BLdata[5] =0, затем BLdata[4] =0, BLdata[5] =1, затем BLdata[4] =1, BLdata[5] =0, ну и т.д.)
Как это вообще делается?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2015, 14:23
Ответы с готовыми решениями:

Сортировать типизированный список
Реализую алгоритм Дейкстры. Рёбра и ноды - отдельные классы. Есть список рёбер, отходящих от каждой...

Сортировать список студентов из файла
Список студенческой группы записан на диске как текстовый файл. Каждая строка списка содержит...

std::sort. Как сортировать список? (список указателей на объект)
Всем доброго времени суток! Извините за флуд темами, я не специально С простыми типами то всё...

Как сортировать список, взятый из БД, по месяцу и дню?
Есть БД с полями Имя, Телефон, Почта, Дата регистрации Поле Дата в виде дд/мм/гг 20.12.2018...

6
127 / 121 / 68
Регистрация: 27.08.2015
Сообщений: 232
05.09.2015, 14:32 2
https://msdn.microsoft.com/ru-... 10%29.aspx
С примерами.
0
0 / 0 / 0
Регистрация: 25.02.2015
Сообщений: 45
05.09.2015, 15:43  [ТС] 3
Что-то мне не помогло. Не понять мне как сортировать список по параметрам вложенных массивов
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
05.09.2015, 16:19 4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication78
{
    class Program
    {
        static void Main(string[] args)
        {
            List<double[]> BL = new List<double[]>();
            BL.Add(new double[6] { 2, 2, 2, 2, 3, 0 });
            BL.Add(new double[6] { 2, 2, 2, 2, 1, 1 });
            BL.Add(new double[6] { 2, 2, 2, 2, 0, 0 });
            BL.Add(new double[6] { 2, 2, 2, 2, 1, 6 });
            BL.Add(new double[6] { 2, 2, 2, 2, 2, 2 });
            BL.Sort((x,y) => {
                if(x[4] > y[4]) return 1;
                else
                {
                    if (x[4] == y[4]) { if (x[5] > y[5]) { return 1; } if (x[5] == y[5]) { return 0; } }
                    return -1;
                }
            });
            foreach (var v in BL) { foreach (var x in v) { Console.WriteLine(x); } Console.WriteLine("\n"); }
            Console.ReadLine();
        }
    }
}
0
127 / 121 / 68
Регистрация: 27.08.2015
Сообщений: 232
05.09.2015, 16:22 5
Например, так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    class Program
    {
        // Функция сравнения 2-х массивов по длине.
        private static int CompareByLength(double[] x, double[] y)
        {
            return (x.Length - y.Length);
        }
 
        static void Main(string[] args)
        {
            double[] a = { 1, 2 };
            double[] b = { 3, 4, 5 };
            double[] c = {6, 7};
            double[] d = { 6, 7, 8, 9, 10};
 
            List<double[]> lst = new List<double[]>() { a, b, c, d};
            lst.Sort(CompareByLength);
            foreach (var arr in lst)
            {
                Console.WriteLine(String.Join(" ", arr));
            }
        }
    }
Добавлено через 3 минуты
В самой функции можете разбирать свои массивы по элементам как угодно. Возврат отрицательного значения - первое меньше второго, положительного - первое больше второго, 0 - они равны.
0
0 / 0 / 0
Регистрация: 25.02.2015
Сообщений: 45
06.09.2015, 01:16  [ТС] 6
Ребята, извините, с ответами я так и не разобрался. Делегаты для меня пока темный лес. Зато, почитав про ЛинкьЮ, нашел для себя правильное решение:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 void BLsort()
        {            
            List<double[]> BLTime = new List<double[]>();
            for (int i = 0; i < 3; i++)
            {      
                for (int j = 0; j < 2; j++)
                {          
                    var SortedBLg = from n in BL
                                   where n[4] == i
                                   where n[5] == j                                   
                                   select n;
                    foreach (double[] SBL in SortedBLg)
                    {
                        BLTime.Add(SBL);
                    }
                 }               
            }
            BL.Clear();
            BL = BLTime;
        }
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
06.09.2015, 09:16 7
Как по мне, так это то еще извращение, во-первых не универсально, во-вторых очень много лишних действий, лучше уж разберитесь таки с делегатами и лямбда выражениями, в них нет ничего страшного: делегат-просто ссылка на метод, а лямбда - просто способ записать создание экземпляра делегата и метод, на который он ссылается, короче. Тут на форуме в прикрепленных темах хорошо все это описано. В моем примере весь функционал в этом методе:
C#
1
2
3
4
5
6
7
8
            BL.Sort((x,y) => {
                if(x[4] > y[4]) return 1;
                else
                {
                    if (x[4] == y[4]) { if (x[5] > y[5]) { return 1; } if (x[5] == y[5]) { return 0; } }
                    return -1;
                }
            });
Что именно тут не ясно-спрашивайте, поясним. Собственно, это достаточно просто откопировать в ваш код и пользоваться, но, естественно, лучше сначала разобраться в том, как оно работает
0
06.09.2015, 09:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2015, 09:16
Помогаю со студенческими работами здесь

как изменить (сортировать) список по значению группе переключателей программным кодам
как изменить (сортировать) список по значению группе переключателей программным кодам например...

Сортировать Двумерный список
имеется вот такой список type NameStr = string; Link = ^Auto; {объявляю Link как тип УКАЗАТЕЛЬ...

Список группы сортировать по среднему баллу
Ребят, суть задачки вот такая: составить список учебной группы, включающей 25 человек. Для каждого...

Сортировать список по количеству цифр в элементах.
Всем здравствуйте. Я здесь первый раз и мне нужно решить задачи чтоб сдать предмет(а пар с предмета...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru