Группировать объекты одного типа C # - PullRequest
3 голосов
/ 22 марта 2011

У меня есть список объектов, которые однозначно определены или идентифицированы одним из их свойств, например, «ID». Мне нужно сгруппировать все объекты с разными идентификаторами, у которых остальные свойства будут одинаковыми.

Пример: Obj имеет свойства "ID", "E1", "E2", "E3". Обратите внимание, что это все свойства объекта Obj.

Я знаю, что идентификаторы различны для всех списков объектов, но хотелось бы сгруппировать, если E1, E2 и E3 одинаковы для разных объектов. Таким образом, у меня будет массив объектов Obj с одинаковыми E1, E2, E3, но разными идентификаторами.

Какой самый простой способ справиться с этим в C #, есть идеи?

Ответы [ 3 ]

9 голосов
/ 22 марта 2011

Что-то вроде этого будет работать с LINQ:

var groups = collections.GroupBy(x => new { x.E1, x.E2, x.E3 });

Это даст вам последовательность групп, которые вы можете перебирать.Например:

var groups = collections.GroupBy(x => new { x.E1, x.E2, x.E3 });
foreach (var group in groups)
{
    Console.WriteLine("Key: {0}", group.Key);
    foreach (var item in group)
    {
        Console.WriteLine("  ID: {0}", item.ID);
    }
}
0 голосов
/ 22 марта 2011

Линк звучит хорошо для меня.

public class YourClass
{
    public string ID { get; set; }
    public string E1 { get; set; }
    public string E2 { get; set; }
    public string E3 { get; set; }
}

public static YourClass[] GetClassArray(IEnumerable<YourClass> objects)
{
    return objects.OrderBy<YourClass, string>(c => c.E1)
                  .ThenBy<YourClass, string>(c => c.E2)
                  .ThenBy<YourClass, string>(c => c.E3)
                  .ThenBy<YourClass, string>(c => c.ID)
                  .ToArray<YourClass>();
}
0 голосов
/ 22 марта 2011

Реализация интерфейса общих свойств / методов между объектами. Используйте тип интерфейса для взаимодействия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...