Как найти одинаковые элементы массива объектов (в 1 массиве)?

static object[] arrComputer = {
            new Comp { marka = "asus", year = 2004 },
            new Comp { marka = "MSI", year = 2002},
            new Comp { marka = "Samsung", year = 2003 },
            new Comp { marka = "Sony", year = 2002 },
            new Comp { marka = "Sony", year = 2004 },
            new Comp { marka = "Asus", year = 2012 },
            };


Как в этом массиве найти элементы с одинаковым годом выпуска?
Только использую лишь циклы, без LINQ.
  • Вопрос задан
  • 1452 просмотра
Пригласить эксперта
Ответы на вопрос 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Собрать коллекцию, примерно так:
var result = new Dictionary<int, List<object>>();

foreach (var item in arrComputer)
{
  var c = (Comp)item;
  // проверяем, есть такой год в коллекции или нет
  if (!result.ContainsKey(c.year))
  {
    // такого года еще нет, добавляем
    result.Add(c.year, new List<object> { c });
  }
  else
  {
    // год есть, добавляем запись в него
    result[c.year].Add(c);
  }
}

// в result будет коллекция: год-компьютеры
foreach (int year in result.Keys)
{
  Console.WriteLine
  (
    "В {0} году на Земле вылупилось компьютеров: {1}", 
    year, 
    result[year].Count
  );

  if (result[year].Count > 1)
  {
    Console.WriteLine("Да это просто демографический взрыв какой-то!");
    foreach (var item in result[year])
    {
      Console.WriteLine("+ {0}", ((Comp)item).marka);
    }
  }
}

Вместо object можно сразу использовать Comp, если использование других типов не предполагается.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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