@Retr0Hacker

Как вписать в новый массив только один новые элемент, если в старом массиве таких элементов несколько?

Доброго вечера всем.
Никак не могу решить задачку по ООП.

Задание такое:

"Текстовый файл U16.txt содержит информацию о рекламных роликах. В строке содержится следующая информация:

рекламируемый товар, товарная группа, продолжительность видеоролика, формат видеоролика в пикселях (ширина, высота). Создайте класс Clip для хранения данных об одном клипе. Создайте класс-контейнер Clips для хранения всех данных о рекламных роликах. Напишите программу для печати исходных данных рекламных роликов в табличном формате.

Найдите самые популярные группы товаров (повторяющиеся чаще всего) для рекламируемых товаров. Если существует несколько таких групп товаров, найдите все и сохраните в отдельном контейнере. Создать контейнер клипов заданного формата Ш x В (ширина, высота вводятся с клавиатуры) таким образом, чтобы в него включался только один клип из определенной группы. Отсортируйте этот контейнер по длительности клипа и группе товаров. Рассчитайте общую продолжительность клипов из вновь созданного контейнера."

Не получается сделать вот это: "Создать контейнер клипов заданного формата Ш x В (ширина, высота вводятся с клавиатуры) таким образом, чтобы в него включался только один клип из определенной группы."

Есть массив объектов:
-----------------------------------------------------------------
Product Group Duration Width Height Repeating
-----------------------------------------------------------------
Product1 BGroup 10,2 800 600 3
Product2 AGroup 3,33 1600 900 2
Product3 AGroup 3,99 800 600 2
Product4 BGroup 5,85 1920 1600 3
Product5 BGroup 14,3 800 600 3
Product6 АGroup 15,9 800 600 2
-----------------------------------------------------------------

То есть если я ввожу, например, 800 и 600, то в новый контейнер должны записаться элементы:
-----------------------------------------------------------------
Product Group Duration Width Height Repeating
-----------------------------------------------------------------
Product1 BGroup 10,2 800 600 3
Product3 AGroup 3,99 800 600 2
-----------------------------------------------------------------

Но увы, никак не получается придумать условия для проверки. То есть если допустим мы записали элемент с введёнными показателями Width и Height из группы BGroup. Как мне сделать проверку, что если программа видит еще элемент из этой группы с такими же показателями, то она не должна его вписывать в ново созданный контейнер? И также само со второй группой
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 2
by_kapt0xa
@by_kapt0xa
Учу кресты катаюсь на велике
ну на задачу я не могу ответить, я могу ответить на заголовок. был бы тут c++ я бы применил sort потом unique.
или просто бы сделал бы хеш-таблицу и потом бы из хеш-таблицы обратно массив бы сделал, если прям обязательно именно массив.(но жеш-таблица не сортирует и даже еще дополнительно перемешивает, но она быстрее, особенно для больших объемов)
предлагаю использовать Dictionary (это вроде хеш таблица и есть), а потом из нее обратно массив
хеш-таблица это таблица "заголовок-данные", заголовок еще ключом называют. хеш таблица гарантирует что все заголовки уникальные. если в нее добавить повторяющийся заголовок, то просто старый заголовок с данными будут заменены новыми.
есть еще HashSet, это как хэш-таблица, но там только заголовки. тоесть это не таблица а множество получается.
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
public IENumerable<Clip> GetClips (IEnumerable<Clip> clips, int w, int h)
{
    return clips.Where(w => w.Width == w && w.Height == h).Distinct(new ClipEqualityComparer())
}


public class ClipEqualityComparer : IEqualityComparer<Clip>
{
    public bool Equals(Clip c1, Clip c2)
    {
         if (c1 == null && c2 == null) return true;
         if (c1 == null || c2 == null) return false;
         if (c1.Product == c2.Product) return true;
    }
    public int GetHashCode(Clip c)
    {
        return c.Product.GetHashCode();
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы