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

Реализация IEquatable<string[]> для класса идентификаторов

04.12.2014, 14:15. Просмотров 464. Ответов 8
Метки нет (Все метки)

Есть класс, наподобие GUID. Генерирующий идентификаторы вот такого плана (ab3c-lkjs-5fhg-9g88). Разделитель, количество блоков и их длина блока указываются в конструкторе. По сути мы имеем массив(_blocks) строк. Идентификатор инициализируется путем конкатенации каждого из элементов массива, разделенными символом разделителя ('-', например).
Т.е. мы имеем:
string[] _blocks;
char _separator;
Как лучше реализовать метод Equals() с учетом оптимизации и минимальным количеством локальных переменных в методе? Т.е. нужно как можно быстрее нарваться на false и выйти из метода. Поделитесь мыслями. Класс выкладывать не стал, т.к. нет смысла. При желании, могу выложить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2014, 14:15
Ответы с готовыми решениями:

Реализация IEquatable и сравнение с помощью оператора ==
Есть вот такой простенький класс с реализацией IEquatable&lt;T&gt; public class...

Интерфейс IEquatable. Осуществить проверку экземпляров класса на равенство между собой
Здравствуйте.Необходимо осуществить проверку экземпляров класса на равенство...

Реализация интерфейса IEqualityComparer для HashSet<Dictionary<string, string>>
Код выдает &quot;2&quot;, что, логично, а хотелось бы, чтобы выдавал &quot;1&quot;, так как...

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

Реализация класса для выполнения операций над массивами
Помогите разобраться в коде, почему не получается вывести значения в listvView...

8
Rameron
Си-решеточник
138 / 132 / 60
Регистрация: 07.02.2011
Сообщений: 642
04.12.2014, 14:19 2
То есть - тебе нужно реализовать максимально ресурсоэкономный сравниватель для идентификаторов, которые представлены в виде массива блоков и разделителя?
0
Nuzland
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 20
04.12.2014, 14:24  [ТС] 3
Совершенно верно.

Добавлено через 2 минуты
Разделитель идет отдельно от блоков. Он тупо для инициализации строки идентификатора.
0
insite2012
Модератор
Эксперт .NET
4858 / 3813 / 1094
Регистрация: 12.10.2013
Сообщений: 11,096
Записей в блоге: 2
04.12.2014, 14:30 4
Не совсем понял задачу... Надо в массиве строк отыскать нужную (или сообщить, что такой там нет), так?
0
Nuzland
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 20
04.12.2014, 14:48  [ТС] 5
Вот смотрите. Например есть два почти одинаковых идентификатора. В стандатной реализации путем перебора по порядку мы на первой же итерации получим false и выйдем из метода.

C#
1
2
string[] id1 = { "1047", "kjds", "asd4", "66sd" };
string[] id2 = { "3047", "kjds", "asd4", "66sd" };
Но как быть тут?
C#
1
2
string[] id1 = { "3047", "kjds", "asd4", "66sd" };
string[] id2 = { "3047", "kjds", "asd4", "dkh7" };
Как в данной ситуации реализовать метод Equals(), чтобы нам не нужно было проверять все три блока по порядку и только на четвертом получить false. За минимальное количество итераций получить false и выйти из метода.
0
valera_21
368 / 353 / 93
Регистрация: 05.01.2010
Сообщений: 1,469
Завершенные тесты: 5
04.12.2014, 16:18 6
Цитата Сообщение от Nuzland Посмотреть сообщение
Как в данной ситуации реализовать метод Equals(), чтобы нам не нужно было проверять все три блока по порядку и только на четвертом получить false. За минимальное количество итераций получить false и выйти из метода.
ыыыы может я чего-то не понимаю?
0
XRoy
861 / 711 / 305
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
04.12.2014, 17:16 7
Nuzland,
Самый быстрый способ будет с использованием unsafe кода, как вариант использоваль memcmp из msvcrt.dll
0
Rameron
Си-решеточник
138 / 132 / 60
Регистрация: 07.02.2011
Сообщений: 642
04.12.2014, 19:40 8
А как насчет того, чтобы генерировать для каждого кода свою hash-сумму и сравнивать их?
1
tezaurismosis
Администратор
Эксперт .NET
8574 / 3871 / 730
Регистрация: 17.04.2012
Сообщений: 8,616
Записей в блоге: 14
04.12.2014, 21:14 9
Цитата Сообщение от Rameron Посмотреть сообщение
генерировать для каждого кода свою hash-сумму и сравнивать их?
Поддерживаю. Нужно только использовать алгоритм, генерирующий уникальные значения, иначе вся наша эквивалентность рано или поздно накроется.
Предлагаю конкатенировать строки из массива _blocks и вызывать GetHashCode() для результата.
0
04.12.2014, 21:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2014, 21:14

Применение стандартных интерфейсов в собственных классах. Реализация итератора для класса. Создание клона
Класс “Многочлен ax^2+bx+c”. Поля – a,b,c, а также имя многочлена и его id....

Применение стандартных интерфейсов в собственных классах. Реализация итератора для класса. Создание клона
Общая постановка задачи: Каждый разрабатываемый класс должен содержать:...

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


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

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

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