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

Ищем похожих. Сортировка списка, по разным полям

21.03.2018, 17:17. Показов 3405. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объявите структуру SHuman, описывающую человека и включающую в себя поля "Фамилия”, ”Имя”, ”Отчество”, ”Год рождения”. На вход подпрограммы подается массив элементов данной структуры.

Напишите функцию, разбивающую этих людей на группы следующим образом - если у двух человек совпадает хотя бы одно поле, они попадают в одну группу (Владимир Семенович Высоцкий и Василий Васильевич Смыслов не имеют «общих» полей, но если в компании есть также Василий Семенович Лановой, то все трое попадут в одну группу). Порядок элементов в группах не важен.

Выберите оптимальный формат возвращаемого значения (как проще всего описать разбиение?).

При разработке алгоритма используйте класс List<>.

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
     public static struct SHuman
        {
            public string Surname;          // фамилия
            public string Firstname;        // имя
            public string Patronymic;       // отчество
            public int Year;                // год рождения
            public SHuman(string surname, string firstname, string patronymic, int year)
            {
                this.Surname = surname;
                this.Firstname = firstname;
                this.Patronymic = patronymic;
                this.Year = year;
            }
 
            static string Pos (SHuman[] Group)
            {
                if ( SHuman[1].FirstName)
            }
 
        }
 
        static void Main(string[] args)
        {
            SHuman[] Group = {new SHuman("Пушкин", "Александр", "Сергеевич", 1799),
                            new SHuman("Ломоносов", "Михаил", "Васильевич", 1711),
                            new SHuman("Тютчев", "Фёдор", "Иванович", 1803),
                            new SHuman("Суворов", "Александр", "Васильевич", 1729),
                            new SHuman("Менделеев", "Дмитрий", "Иванович", 1834),
                            new SHuman("Ахматова", "Анна", "Андреевна", 1889),
                            new SHuman("Володин", "Александр", "Моисеевич", 1919),
                            new SHuman("Мухина", "Вера", "Игнатьевна", 1889)};
 
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.03.2018, 17:17
Ответы с готовыми решениями:

Сортировка по разным полям (разное количество параметров)
Приветсвую. Задача в том, чтобы отсортировать объект по разным полям, или по одному из них или вообще не сортировать. Скажем объект:...

Обращение из свойства к разным полям класса
Доброго времени суток. У меня такая проблема, есть класс треугольников в нем определены поля a,b,c длины сторон треугольника. нужно создать...

Сортировка постов по произвольным полям ACF. В разных рубриках по разным полям
Всем доброго дня! Не могу понять каким образом можно реализовать сортировку постов в разных рубриках по разным полям. Пример: ...

6
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
22.03.2018, 04:35
чемто интересным попахивает
не динамическое ли это программирование?

Добавлено через 11 часов 8 минут
Цитата Сообщение от qwer126 Посмотреть сообщение
если у двух человек совпадает хотя бы одно поле, они попадают в одну группу (Владимир Семенович Высоцкий и Василий Васильевич Смыслов не имеют «общих» полей, но если в компании есть также Василий Семенович Лановой, то все трое попадут в одну группу)
Мне интересен вот такой сценарий:
- Добавляется в список первый человек: Владимир Семенович Высоцкий. Ок, он попадает в группу №1
- Добавляется в список второй человек: Василий Васильевич Смыслов. Т.к. у этого человека нет ничего общего с членами уже имеющихся групп, то он попадает в группу №2

И вот самое интересное когда добавляется Василий Семенович Лановой, то что должно произойти?
Грохаем все группы, и закидываем всех членов в группу №1 ?

Добавлено через 34 секунды
Кто-нибудь хоть примерно представляет как это должно быть ?
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
22.03.2018, 06:58
qwer126, что-то из теории графов, все объекты - граф, связи - совпадения в ФИО, необходимо отыскать все компоненты связности - это и будут искомые группы. Не вижу тут особых затруднений, сортировка тут не при чем, просто начинаем с группы с одним объектом и добавляем при наличии связи, удаляя из общего списка. И так пока исходное множество не опустеет.
1
1 / 1 / 0
Регистрация: 19.02.2018
Сообщений: 13
31.03.2018, 15:07  [ТС]
я разобралась
Создается список, каждая ячейка которого так же содержит список.
Дальше по очереди просматриваем людей.
Первого человека сразу добавляем в начало списка.
Берём второго. Сравниваем его параметры с параметрами всех людей, содержащихся в первой ячейке. Если есть совпадение - добавляем эту ячейку, если нет - переходим ко второй и проверяем там. Если совпадений нигде не найдено, добавляем человека в новую ячейку.
В итоге каждой ячейке списка соответствует группа людей
0
0 / 0 / 0
Регистрация: 24.03.2019
Сообщений: 1
24.03.2019, 19:41
Это конечно маловероятно, но все же. Осталась ли у вас программа? Если есть можете скинуть, пожалуйста (очень нужна).
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.03.2019, 20:59
Kopiton,
Цитата Сообщение от dailydose Посмотреть сообщение
Мне интересен вот такой сценарий:
- Добавляется в список первый человек: Владимир Семенович Высоцкий. Ок, он попадает в группу №1
- Добавляется в список второй человек: Василий Васильевич Смыслов. Т.к. у этого человека нет ничего общего с членами уже имеющихся групп, то он попадает в группу №2
И вот самое интересное когда добавляется Василий Семенович Лановой, то что должно произойти?
Грохаем все группы, и закидываем всех членов в группу №1 ?
Если не грохать группы, то получается так:
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
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Question2214507_GroupBy_IEqualityComparer
{
    public struct SHuman
    {
        public string Surname;          // фамилия
        public string Firstname;        // имя
        public string Patronymic;       // отчество
        public int Year;                // год рождения
        public SHuman(string surname, string firstname, string patronymic, int year)
        {
            Surname = surname;
            Firstname = firstname;
            Patronymic = patronymic;
            Year = year;
        }
    }
 
    public class HumanComparer : IEqualityComparer<SHuman>
    {
        public bool Equals(SHuman x, SHuman y)
        {
            return x.Surname == y.Surname || x.Firstname == y.Firstname || x.Patronymic == y.Patronymic || x.Year == y.Year;
        }
 
        public int GetHashCode(SHuman obj)
        {
            return 0;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            SHuman[] Group = {new SHuman("Пушкин", "Александр", "Сергеевич", 1799),
                            new SHuman("Ломоносов", "Михаил", "Васильевич", 1711),
                            new SHuman("Тютчев", "Фёдор", "Иванович", 1803),
                            new SHuman("Суворов", "Александр", "Васильевич", 1729),
                            new SHuman("Менделеев", "Дмитрий", "Иванович", 1834),
                            new SHuman("Ахматова", "Анна", "Андреевна", 1889),
                            new SHuman("Володин", "Александр", "Моисеевич", 1919),
                            new SHuman("Мухина", "Вера", "Игнатьевна", 1889)};
 
            foreach (var group in Groupsd(Group))
            {
                Console.WriteLine("Группа.");
                foreach (var human in group)
                {
                    Console.WriteLine($"{human.Surname} {human.Firstname} {human.Patronymic} {human.Year}");
                }
            }
           
            Console.ReadKey();
        }
 
        static List<IGrouping<SHuman,SHuman>> Groupsd(SHuman[] Group)
            => Group.GroupBy(e => e, new HumanComparer()).ToList();
    }
}
Но это противоречит условию задачи, что группы надо иногда уничтожать.

Цитата Сообщение от qwer126 Посмотреть сообщение
Создается список, каждая ячейка которого так же содержит список.
Дальше по очереди просматриваем людей.
Первого человека сразу добавляем в начало списка.
Берём второго. Сравниваем его параметры с параметрами всех людей, содержащихся в первой ячейке. Если есть совпадение - добавляем эту ячейку, если нет - переходим ко второй и проверяем там. Если совпадений нигде не найдено, добавляем человека в новую ячейку.
В итоге каждой ячейке списка соответствует группа людей
Это тоже неправильный ответ. Группы же надо иногда уничтожать.
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
01.04.2019, 21:45
Цитата Сообщение от amr-now Посмотреть сообщение
Если не грохать группы, то получается так:
ага, ок. спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2019, 21:45
Помогаю со студенческими работами здесь

Сортировка массива структур по разным полям
Имеется массив студентов. Подскажите, пожалуйста, как сортировать их по полю &quot;курс&quot; и полю &quot;фамилия&quot; . #include...

Сортировка списка по всем полям в любых направлениях. Использовать указатели на функции
В общем, я запутался. Вот задание. Необходимо разработать программу согласно варианту задания. При реализации использовать указатели...

Поиск по разным полям.
Приветствую. Подскажите такой вопрос. Есть база. В таблице 8 полей. По нажатию на кнопку открывается новая форма с 8-ю edit'ами. В них...

Поиск пользователя по разным полям
Здравствуйте! Столкнулся с задачей которую не могу решить, нужно выводить данные с таблицы пользователей которые имеют соответственное имя,...

Поиск в структуре по разным полям
Доброго времени суток. Нужна небольшая консультация. Задание стандартное, работа со структурой. И одним из пунктов идет поиск.Собственно...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru