Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2011, 11:30   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Коллекция на основе алгоритма хеширования.

Доброго времени суток, уважаемые программисты)

Подскажите пожалуйста - в чём по-вашему главная идея такой вот коллекции (как её реализовать- в смысле - создать))-
Цитата:
HashSet<T>: ISet<T> – класс множества на основе алгоритма хеширования (использовать методы GetHashCode и Equals типа T);
Заранее благодарю)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 05.05.2011, 11:36   #2
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

то есть тут необходимо создать что-то вроде своей хэштаблицы по типу C# Hashtable- только вот как, честно говоря, не понятно..
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 05.05.2011, 20:17   #3
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
Подскажите пожалуйста - в чём по-вашему главная идея такой вот коллекции (как её реализовать- в смысле - создать))-
ISet представляет абстрацию для множества, HashSet - одна из реализаций на основе hash-значений элементов.
HashSet<T> реализует ISet<T> в .NET 4.
Цитата:
то есть тут необходимо создать что-то вроде своей хэштаблицы по типу C# Hashtable- только вот как, честно говоря, не понятно..
Если хотите написать свою реализацию, то создайте класс и реализуйте в нем интерфейс ISet<T>.
Для примера, можно рефлектором посмотреть, как реализован класс System.Collections.Generic.HashSet< T>.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 06.05.2011, 07:31   #4
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Daramant, спасибо) но я итак уже наследуюсь от ISet<T> - и обираюсь реализовывать его метода, но проблема в том, что для коллекции нужно что-то базовое -например список , а что нужно здесь - не пойму)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 06.05.2011, 08:10   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
HashSet<T>: ISet<T>
>>
Код:
class YourClass<T> : ICollection<T>, ... {
   private List<T> Items;
   
   public HashSet<T>() {
      Items = new List<T>();
   }
Может как то так? Я просто не пойму в чем проблема.
BOBAH13 вне форума Ответить с цитированием
Старый 06.05.2011, 08:46   #6
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Цитата:
Может как то так? Я просто не пойму в чем проблема.
то есть на базе списка вы считаете.....вотч то не понимаю- в задании -
Цитата:
HashSet<T>: ISet<T> – класс множества на основе алгоритма хеширования (использовать методы GetHashCode и Equals типа T);
- при этом надо из стандартных надо реализовать только IEnumerable<T> + ряд дополнительных свойств -
Код:
public interface ISet<T> : IEnumerable<T> // это наш базовый интерфейс.
    {
         void Add(T value);
         void Clear();
         bool Contains(T value);
         void Remove(T value);
         int Count
        {
             get;
           set;
я вот что не могу понять (действительно - сразу вопрос плохо сформулировал) -
например Contains-метод - проверяет на наличие в колекции чего-то -
но в данном задании, как я понимаю, надо сравнивать хэшкоды проверяемого значения и элементов этой самой коллекции....- а иначе нет смысла использовать именно хэш....или есть?
и ещё получается, что для организации foreach надо перебирать хэш-представления, а вот возвращать, если надо - уже сам элемент....
единственное, что я представляю - это два массива один с элементами , другой с хэш-представлениями (чтобы можно было отдельно с ними работать.)

посоветуйте что-нибудь.
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 06.05.2011, 10:02   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

KeyValuePair то что вам нужно, одно поле строка Hash (если угодно), второе ваше поле, которое соответствует данному хеш коду.

Второй вариант, просто создать собственный класс ***Item, где будете хранить сколько и какие нужно поля + хеш код. При реализации I*** интерфейса родителя у вашего класса (в студии просто можно навести на подчеркивание и вставится автоматически код-шаблон-заглушка с not implemented exceptions в каждом методе). После чего большинство полей просто вызываете аналог от List<ВашКлассItem> Items; да и все, я так многие вещи реализовывал.

Есть еще вариант, Dictionary использовать, там сразу Key=Value механизм работает, как я понял вам это требуется.
BOBAH13 вне форума Ответить с цитированием
Старый 06.05.2011, 15:50   #8
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

BOBAH13, благодарю за советы! попробую разобраться в предложенных вариантах)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 06.05.2011, 19:39   #9
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
что для коллекции нужно что-то базовое -например список , а что нужно здесь - не пойму)
Тут, как хотите, можно список, массив, словарь.

Цитата:
но в данном задании, как я понимаю, надо сравнивать хэшкоды проверяемого значения и элементов этой самой коллекции....- а иначе нет смысла использовать именно хэш....или есть?
Смысл в том, что вы сами определяете критерий, на основе которого, определяется - равны объекты между собой или нет. Есть смысл использовать именно hash-код, потому что в .net все классы наследуются от класса Object, который содержит виртуальный метод GetHashCode(). Т.е. hash можно получить у любого объекта, это особенно полезно, т.к. мы делаем обобщенный класс.

Цитата:
и ещё получается, что для организации foreach надо перебирать хэш-представления, а вот возвращать, если надо - уже сам элемент....
единственное, что я представляю - это два массива один с элементами , другой с хэш-представлениями (чтобы можно было отдельно с ними работать.)
Зачем хеши, элементы и перебирать, просто реализация зависит от выбранного внутреннего представления.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 09.05.2011, 15:36   #10
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Цитата:
Зачем хеши, элементы и перебирать, просто реализация зависит от выбранного внутреннего представления.
по-идее таблица применяется, в случае если сами элементы не сильно упорядочены или каждый из них избыточен...
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пример Хеширования gs.Soroka Помощь студентам 0 04.04.2011 23:25
MD5 хеширования ZET78 Общие вопросы C/C++ 2 06.07.2010 23:33
Добавление слов в таблицу методом хеширования Marsel737 Общие вопросы Delphi 0 28.02.2010 18:14
С++ .алгоритм хеширования SHA1 Tigra1900 Помощь студентам 0 01.06.2009 17:07
По поводу алгоритма хеширования md5 Jugger Помощь студентам 2 03.09.2008 22:57