Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
BsSlayer
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
#1

Сортировка списка List - C#

25.11.2015, 17:22. Просмотров 385. Ответов 3
Метки нет (Все метки)

Помогите, пожалуйста, решить проблему с сортировкой.
Есть набор сущностей Человек, Ученик, Преподаватель, Студент, Аспирант, Рабочий. В программе мы задаём для них их свойства —
Общие: Имя, Фамилия, Отчество, Адрес
Личные: Название школы и Класс для Ученика; Название предмета для Преподавателя; Специальность для Рабочего и т.д.

В конце мы выводим список в таком порядке, в котором его и задавали (На скриншоте видно, что выводятся элементы в том порядке, в котором и записывались.), но теперь же мне нужно сделать сортировку по сущностям (Ученик, Студент и т.д.), но я не пойму, как это сделать, ведь эти сущности у меня записаны, как классы, они не подписаны в самом списке... Как отсортировать? Помогите, пожалуйста.
P.S. То, что закомментировано — это я пробовал в каждую строку списка записывать без ввода тип сущности, которой принадлежит строка, и по этому параметру сортировать, но не вышло...

P.P.S. List.Sort() пробовал, но, видимо, я слишком кривой — не вышло.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
using System;
using System.Collections.Generic;
 
namespace Лаба_10_часть_3
{
    interface IPerson
    {
        //string Type { get; set; }
        string Name { get; set; }
        string Surname { get; set; }
        string Otchestvo { get; set; }
        string Adress { get; set; }
    }
    interface IPupil
    {
        string NameSchool { get; set; }
        string NameKlass { get; set; }
    }
    interface ITeacher
    {
        string NamePredmet { get; set; }
    }
    interface IStudent
    {
        string NameUniver { get; set; }
        string NomerStud { get; set; }
    }
    interface IWorker
    {
        string Special { get; set; }
    }
    interface IAdvancedStudent
    {
        string TemaDissertazii { get; set; }
    }
    class CPupil : IPupil, IPerson
    {
        //public string Type { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Otchestvo { get; set; }
        public string Adress { get; set; }
        public string NameSchool { get; set; }
        public string NameKlass { get; set; }
 
        public override string ToString()
        {
            return "Ученик — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Номер школы" + NameSchool + " Номер класса: " + NameKlass;
        }
    }
    class CTeacher : ITeacher, IPerson
    {
        //public string Type { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Otchestvo { get; set; }
        public string Adress { get; set; }
        public string NamePredmet { get; set; }
 
        public override string ToString()
        {
            return "Учитель — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Название предмета: " + NamePredmet;
        }
    }
    class CStudent : IStudent, IPerson
    {
        //public string Type { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Otchestvo { get; set; }
        public string Adress { get; set; }
        public string NameUniver { get; set; }
        public string NomerStud { get; set; }
 
        public override string ToString()
        {
            return "Студент — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Название университета: " + NameUniver + " Номер студента: " + NomerStud;
        }
    }
    class CWorker : IWorker, IPerson
    {
        //public string Type { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Otchestvo { get; set; }
        public string Adress { get; set; }
        public string Special { get; set; }
 
        public override string ToString()
        {
            return "Рабочий — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Специальность: " + Special;
        }
    }
    class CAdvanceStudent : IAdvancedStudent, IStudent, IPerson
    {
        //public string Type { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Otchestvo { get; set; }
        public string Adress { get; set; }
        public string NameUniver { get; set; }
        public string NomerStud { get; set; }
        public string TemaDissertazii { get; set; }
 
        public override string ToString()
        {
            return "Аспирант — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Название университета: " + NameUniver + " Номер студента: " + NomerStud + " Тема диссертации: " + TemaDissertazii;
        }
    }
    class List
    {
        public static List<IPerson> spisok_chel = new List<IPerson>();
    }
    class Program
    {
        static void Main(string[] args)
        {
            string control = "";
            while (control != "exit")
            {
                Console.WriteLine("***********************************");
                Console.WriteLine("**     Создание сущности:        **");
                Console.WriteLine("***********************************");
                Console.WriteLine("** 1 - Создать ученика           **");
                Console.WriteLine("** 2 - Создать учителя           **");
                Console.WriteLine("** 3 - Создать аспиранта         **");
                Console.WriteLine("** 4 - Создать студента          **");
                Console.WriteLine("** 5 - Создать рабочего          **");
                Console.WriteLine("** 6 - Вывести список сущностей  **");
                Console.WriteLine("** 7 - Выход                     **");
                Console.WriteLine("***********************************");
                control = Console.ReadLine();
                Console.Clear();
                switch (control)
                {
                    case "1":
                        CPupil cp = new CPupil();
                        //cp.Type = "Pupil";
                        Console.Write("Введите имя: ");
                        cp.Name = Console.ReadLine();
                        Console.Write("Введите фамилию: ");
                        cp.Surname = Console.ReadLine();
                        Console.Write("Введите отчество: ");
                        cp.Otchestvo = Console.ReadLine();
                        Console.Write("Введите адрес: ");
                        cp.Adress = Console.ReadLine();
                        Console.Write("Введите номер класса: ");
                        cp.NameKlass = Console.ReadLine();
                        Console.Write("Введите номер школы: ");
                        cp.NameSchool = Console.ReadLine();
                        List.spisok_chel.Add(cp);
                        Console.ReadKey();
                        Console.Clear();
                        break;
                    case "2":
                        CTeacher ct = new CTeacher();
                        //ct.Type = "Teacher";
                        Console.Write("Введите имя: ");
                        ct.Name = Console.ReadLine();
                        Console.Write("Введите фамилию: ");
                        ct.Surname = Console.ReadLine();
                        Console.Write("Введите отчество: ");
                        ct.Otchestvo = Console.ReadLine();
                        Console.Write("Введите адрес: ");
                        ct.Adress = Console.ReadLine();
                        Console.Write("Введите название преподаваемого предмета: ");
                        ct.NamePredmet = Console.ReadLine();
                        List.spisok_chel.Add(ct);
                        Console.ReadKey();
                        Console.Clear();
                        break;
                    case "3":
                        CAdvanceStudent cas = new CAdvanceStudent();
                        //cas.Type = "AStudent";
                        Console.Write("Введите имя: ");
                        cas.Name = Console.ReadLine();
                        Console.Write("Введите фамилию: ");
                        cas.Surname = Console.ReadLine();
                        Console.Write("Введите отчество: ");
                        cas.Otchestvo = Console.ReadLine();
                        Console.Write("Введите адрес: ");
                        cas.Adress = Console.ReadLine();
                        Console.Write("Введите название университета: ");
                        cas.NameUniver = Console.ReadLine();
                        Console.Write("Введите номер студента: ");
                        cas.NomerStud = Console.ReadLine();
                        Console.Write("Введите тему диссертации: ");
                        cas.TemaDissertazii = Console.ReadLine();
                        List.spisok_chel.Add(cas);
                        Console.ReadKey();
                        Console.Clear();
                        break;
                    case "4":
                        CStudent cs = new CStudent();
                        //cs.Type = "Student";
                        Console.Write("Введите имя: ");
                        cs.Name = Console.ReadLine();
                        Console.Write("Введите фамилию: ");
                        cs.Surname = Console.ReadLine();
                        Console.Write("Введите отчество: ");
                        cs.Otchestvo = Console.ReadLine();
                        Console.Write("Введите адрес: ");
                        cs.Adress = Console.ReadLine();
                        Console.Write("Введите название университета ");
                        cs.NameUniver = Console.ReadLine();
                        Console.Write("Введите номер студента: ");
                        cs.NomerStud = Console.ReadLine();
                        List.spisok_chel.Add(cs);
                        Console.ReadKey();
                        Console.Clear();
                        break;
                    case "5":
                        CWorker cw = new CWorker();
                        //cw.Type = "Worker";
                        Console.Write("Введите имя: ");
                        cw.Name = Console.ReadLine();
                        Console.Write("Введите фамилию: ");
                        cw.Surname = Console.ReadLine();
                        Console.Write("Введите отчество: ");
                        cw.Otchestvo = Console.ReadLine();
                        Console.Write("Введите адрес: ");
                        cw.Adress = Console.ReadLine();
                        Console.Write("Введите специальность ");
                        cw.Special = Console.ReadLine();
                        List.spisok_chel.Add(cw);
                        Console.ReadKey();
                        Console.Clear();
                        break;
                    case "6":
                        //spisok_chel.Sort(IPerson.Type);
                        foreach (IPerson item in List.spisok_chel)
                        {
                            //if (spisok_chel.EndsWith("T"))
                            Console.WriteLine(item.ToString());
                            Console.WriteLine("*********************************************************");
                        }
                        break;
                    case "7":
                        {
                            control = "exit";
                        }
                        Console.ReadKey();
                        Console.Clear();
                        break;
                }
            }
        }
    }
}
0
Миниатюры
Сортировка списка List  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2015, 17:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка списка List (C#):

Сортировка списка list
Здравствуйте, знатоки ! Нашел код приведенный ниже на msdn, свою задачу он...

Сортировка списка List<T>
В общем, при реализации решила не организовывать массив структур, а вместо...

Сортировка списка List<string>
Задача - Получить отсортированный список полных имен файлов. Проблема в...

Неправильная сортировка списка list.Sort();
Неправильная сортировка списка list.Sort(); Входные данные ...

Сортировка списка с учетом регистра list.Sort()
Не могу разобраться как сделать сортировку такого типа: Сначала все с заглавных...

Сортировка List с двумя параметрами списка вызывает ошибку
Добрый день уважаемые форумчане, помогите отсортировать список. Список объявляю...

3
Lexeq
605 / 521 / 385
Регистрация: 21.01.2014
Сообщений: 1,432
Завершенные тесты: 2
25.11.2015, 21:11 #2
Лучший ответ Сообщение было отмечено BsSlayer как решение

Решение

Зачем вам столько интерфейсов? Кто кроме учителя унаследует ITeacher?
C#
1
2
3
4
5
6
7
8
                    //using System.Linq;
                    case "6":
                        List.spisok_chel.Sort((a, b) => a.GetType().Name.CompareTo(b.GetType().Name));
                        foreach (var item in List.spisok_chel)
                        {
                            Console.WriteLine(item);
                        }
                        break;
1
BsSlayer
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
25.11.2015, 22:39  [ТС] #3
Lexeq, огромное спасибо. Правда, я не до конца понял как осуществляется эта сортировка, надо посидеть понять, осознать.
Ещё раз спасибо.

P.S. Никто не унаследует, я просто сделал для каждой сущности интерфейс. Этого не надо было делать?
0
Lexeq
605 / 521 / 385
Регистрация: 21.01.2014
Сообщений: 1,432
Завершенные тесты: 2
26.11.2015, 00:02 #4
Цитата Сообщение от BsSlayer Посмотреть сообщение
Этого не надо было делать?
Это лишнее. На мой взгляд тут и IPerson не нужен, если он не требуется заданием. Логичнее использовать базовый класс и все станет проще
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Otchestvo { get; set; }
        public string Adress { get; set; }
    }
 
    class CPupil : Person
    {
        public string NameSchool { get; set; }
        public string NameKlass { get; set; }
 
        public override string ToString()
        {
            return "Ученик — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Номер школы" + NameSchool + " Номер класса: " + NameKlass;
        }
    }
    class CTeacher : Person
    {
        public string NamePredmet { get; set; }
 
        public override string ToString()
        {
            return "Учитель — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Название предмета: " + NamePredmet;
        }
    }
    class CStudent : Person
    {
        public string NameUniver { get; set; }
        public string NomerStud { get; set; }
 
        public override string ToString()
        {
            return "Студент — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Название университета: " + NameUniver + " Номер студента: " + NomerStud;
        }
    }
    class CWorker : Person
    {
        public string Special { get; set; }
 
        public override string ToString()
        {
            return "Рабочий — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Специальность: " + Special;
        }
    }
    class CAdvanceStudent : CStudent
    {
        public string TemaDissertazii { get; set; }
 
        public override string ToString()
        {
            return "Аспирант — " + " Имя: " + Name + " Фамилия: " + Surname + " Отчество: " + Otchestvo + " Адрес: " + Adress + " Название университета: " + NameUniver + " Номер студента: " + NomerStud + " Тема диссертации: " + TemaDissertazii;
        }
    }
    class List
    {
        public static List<Person> spisok_chel = new List<Person>();
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2015, 00:02
Привет! Вот еще темы с решениями:

Сортировка двумерного List<List<string>>, по 1-ой строке, чтобы элементы 2-ой строки передвинулись в соответствии с 1-ой
Дан двумерный массив List&lt;List&lt;string&gt;&gt; , состоящий из двух строк, как его...

Сортировка List внутри List
Доброго времени суток! Имеется структура вида: public class Node { ...

Сортировка List<List<string>>
Как отсортировать список списков по количеству элементов в элементах :D или...

Сортировка ДВУМЕРНОГО List<List<T>>
Добрый день или вечер. В написании одной программулины у меня возникли...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru