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

Работа с множеством (HashSet и т.д.)

11.01.2016, 20:56. Показов 1335. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Предположим есть класс Person
C#
1
2
3
4
5
public class Person
{
   public string firtsName;
   public string lastName;
}
Необходимо хранить объекты так, чтобы гарантировалось, что в коллекции они уникальны. Как это можно сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2016, 20:56
Ответы с готовыми решениями:

Обсуждение HashSet, в частности- хранит HashSet объекты отсортированными или нет?
Что-то я не могу понять. Смотрите, мне надо запихать 10000 случайных элементов типа Integer в порядке их генерирования в HashSet, а потом...

HashSet. Удалить объект-класс из HashSet
Всем привет! Есть код: HashSet<Human> humanHashSet = new HashSet(); humanHashSet.add(new...

Работа с HashSet на формах
Доброго времени суток. Моя задача - создать приложение для работы с коллекцией HashSet. Ступор возникает в моменте выполнения свойства...

5
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
11.01.2016, 21:20
Вариантов несколько:

1. Сделать свой класс "сравнибельным". То есть, реализовать IEquatable<Person>.

2. Написать свой класс "компарер", который реализует IEqualityComparer<Person>, и передать его в конструктор HashSet<Person>.

3. Сделать вместо класса структуру. Структура по-умолчанию сравнивается по всем полям.
1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.01.2016, 21:23
schoolboy_,
Понятие "уникальный" - расплывчатое. Если вы имеете ввиду что вам нужно что бы Person были уникальны по совокупности фамилии и имени, то нужно переопределить два метода: Equals() и GetHashCode():
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public class Person
    {
        public string firtsName;
        public string lastName;
 
        public override int GetHashCode()
        {
            return firtsName.GetHashCode() ^ lastName.GetHashCode();
        }
 
        public override bool Equals(object obj)
        {
            var other = obj as Person;
            if (other == null) return false;
            return other.firtsName == firtsName && other.lastName == lastName;
        }
    }
Shamil1, пункты 1 и 2 - не подходят для HashSet<>, поскольку не переопределяют GetHashCode().
1
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
11.01.2016, 21:39
Storm23,
IEqualityComparer<T> явно содержит GetHashCode().
А про IEquatable<T> написано, что если вы реализуете его, то должны также переопределить Object.Equals(Object) и GetHashCode(you should also override the base class implementations of Object.Equals(Object) and GetHashCode).
1
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
11.01.2016, 21:42  [ТС]
Storm23, Shamil1, спасибо.
Storm23, в методе GetHashCode(), что означает символ "крышка"?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.01.2016, 21:47
Цитата Сообщение от schoolboy_ Посмотреть сообщение
в методе GetHashCode(), что означает символ "крышка"?
Логический XOR.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2016, 21:47
Помогаю со студенческими работами здесь

HashSet<string> Работа с элементами листа - поиск дублей
Всем привет. Как дошел до этой проблемы, думал справлюсь за пару минут. Но нет. Что-то пошло не так... HashSet&lt;string&gt; Работа с...

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

Построить биекцию между множеством N и множеством чётных чисел
Друзья, нужна помощь в построении биекции, как это сделать? :scratch:

Работа с множеством кнопок
Привет! Решил доделать игрушку, камекадзе. Может кто знает. Тоесть дано поле, 5 клеток в ширину и 10 в высоту. Пользователь должен...

Работа с множеством точек
Здравствуйте, уважаемые пользователи мат.пакета Maple. Появилась необходимость обратиться к Вам за помощью. У меня есть некоторое...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru