Здравствуйте, Хэлкар, Вы писали:
Р>>Ты не понял что такое составной ключ и на кой черт он нужен.
Х>Я тоже по заданию не понял на кой черт здесь нужен составной ключ.
Здравствуйте, Хэлкар, Вы писали:
Х>>Я тоже по заданию не понял на кой черт здесь нужен составной ключ. Х>Можете объяснить?
Спроектируйте и реализуйте класс-коллекцию для хранения элементов, имеющих уникальный составной ключ [Id, Name] (Id и Name – компоненты ключа, могу быть произвольного типа).
Получаем в сишной терминологии
template <typename A, typename B, typename C>
class our_magic_container_t: private std::map<std::pair<A, B>, C>
{
};
а так же методы для эффективного по скорости получения элементов по их Id ИЛИ Name.
Получаем два метода
template <class Iterator>
void our_magic_container::copy_into(const A & id, Iterator pos);
template <class Iterator>
void our_magic_container::copy_into(const B & name, Iterator pos);
Здравствуйте, mig84, Вы писали:
M>Предоставьте необходимые с вашей точки зрения методы для этой коллекции, а так же методы для эффективного по скорости получения элементов по их Id ИЛИ Name.
... M>Этот вариант решения, как видно, не понравился проверявшему. M>Буду признателен, если "ткнете носом" в ошибки. Понимаю, что, возможно подошел к решению довольно формально, но по требованиям вроде все реализовал. Или чего-то не так понял.
Я не очень силен в C# и возможно чего и не понял в коде, но мне показалось что выделенная часть условия не была реализована.
Для уточнения задам простой вопрос.
Допустим я добавил в Вашу коллекцию миллион элементов.
Какое максимальное количество итераций потребуется для поиска элемента по Id и какое по Name?
Собственно в дотнете мы получаем ровно тоже самое. Вопрос — зачем нужен "составной ключ", если мы всегда запрашиваем данные по одному или по другому параметру?
Здравствуйте, Хэлкар, Вы писали:
Х>Собственно в дотнете мы получаем ровно тоже самое. Вопрос — зачем нужен "составной ключ", если мы всегда запрашиваем данные по одному или по другому параметру?
По составному ключу мы получаем не больше одного значения. По его части мы получаем произвольное число значений. Т. е. вот это
public MyElement GetElementById(UserType _id)
должно быть заменено на
public IEnumerable<MyElement> GetElementById(UserType _id)
познания в C# не позволяет мне указать произвольный контейнер, куда будут вставлены элементы типа MyElement.
Здравствуйте, mig84, Вы писали:
M>Здравствуйте. Не так давно выполнил (во всяком случае так считал) тестовое задание. Описание задачи: M>Спроектируйте и реализуйте класс-коллекцию для хранения элементов, имеющих уникальный составной ключ [Id, Name] (Id и Name – компоненты ключа, могу быть произвольного типа). Вы можете использовать любую встроенную коллекцию .NET Framework. M>Предоставьте необходимые с вашей точки зрения методы для этой коллекции, а так же методы для эффективного по скорости получения элементов по их Id ИЛИ Name. M>Программа должна содержать пример использования коллекции с идентификатором ключа в виде пользовательского типа (т.е. Id в ключе – UserType, объекты UserType должны сравниваться по значению). M>Дополнительно: Создайте потокобезопасную реализацию этой коллекции (не использовать коллекции из пространства имён System.Collections.Concurrent). M>
2ГИС детектед . Тут generic конечно был нужен.
Могу показать код для этой задачи который они приняли
Здравствуйте, mig84, Вы писали:
Х>>Охм, посмотрел GetElementById и GetElementByName — зачем там dynamic???
M>А почему бы и нет? ))) Просто поменять на MyElement забыл.
Там ретурна ещё нет. Можно добавить ещё myFavouritVar, которую не инициализировать, но от этого код станет только хуже.
public override bool Equals(object obj)
{
if (!(obj is MyElement))
{
MyElement el = (MyElement)obj;
return Id == el.Id && Name == el.Name;
}
else
{
return false;
}
}
Может я совсем C# уже забыл, но что вернёт obj is MyElement если obj имеет тип MyElement?
mig84, ты код запускал хоть раз?
Здравствуйте, alzt, Вы писали:
A>Скорее всего нужен был ещё метод, который ищет по MyId.
А еще возможен вариант проверки коммуникативных навыков, задание в общем-то составлено витиевато, посему вполне могли проверять, насколько соискатель будет уточнять задание.
Здравствуйте, Mystic, Вы писали:
A>>Скорее всего нужен был ещё метод, который ищет по MyId.
M>А еще возможен вариант проверки коммуникативных навыков, задание в общем-то составлено витиевато, посему вполне могли проверять, насколько соискатель будет уточнять задание.
Это вряд ли. Людям ответить лень, а уж что-то уточнять и тем более.
В качестве правила хорошего тона (собственно и кода), предостваили
бы за одно и юнит-тесты для Вашего кода. Уже был бы неплохой плюс к карме.
Да и сами тесты помогли бы Вам лучше понять код и требования.
12/6/2013 2:39 PM, Sharov пишет:
> В качестве правила хорошего тона (собственно и кода), предостваили > бы за одно и юнит-тесты для Вашего кода. Уже был бы неплохой плюс к карме. > Да и сами тесты помогли бы Вам лучше понять код и требования.
Так это ты задачку давал? А что ж человеку не ответил, а отвечаешь
только здесь?