Получите список отличных объектов и их количества

У меня есть объект, который имеет много свойств, но только два для волнения о:

myobject.ID который является int
myobject.Names который является a HashSet

Тогда у меня есть a List из тех объектов, который смотрит что-то подобное этому:

List<myobject>

Я использую Linq для получения некоторых данных в повторитель, но я не уверен, как получить список Имен и как часто они обнаруживаются.

Хочу использовать Linq, чтобы избежать необходимости циклично выполняться через данные.

Поскольку мои теги должны показать, это - решение ASP.NET с помощью C#.

Некоторое разъяснение:
Позволяет говорят, что у меня есть всего три объекта в моем списке: Объект 1 имеет John, Fred, Jack на его имена. Объект 2 имеет John, Fred, Joe на его имена. Объект 3 имеет John на свои имена.

Я пытаюсь возвратить следующее: John - 3 Fred - 2 Jack - 1 Joe - 1

Кроме того, как примечание я знаком с необходимостью записать мой собственный компаратор для моего объекта, я просто отсутствую 'как к' для полного решения в моих мыслях.

13
задан Clarence Klopfstein 6 January 2010 в 02:21
поделиться

2 ответа

Вот как я понимаю проблему, которую вы пытаетесь решить. У вас есть список миобъектов . Каждый мой объект имеет свойство под названием Names, которое представляет собой HashSet из strings (т.е. HashSet). Вы хотите посчитать количество раз каждой строки, которая появляется в некоторых myobject.Names во всех myobject.Names. То есть, у вас есть

"Alice", "Bob", "Charlie"
"Alice", "Bob", "Donald"
"Alice", "Donald", "Ernie"

в виде трех myobject.Names и вы хотите увидеть

"Alice", 3
"Bob", 2
"Charlie", 1
"Donald", 2
"Ernie", 1

If so:

var query = list.SelectMany(x => x.Names)
                .GroupBy(s => s)
                .Select(g => new { Name = g.Key, Count = g.Count() });

foreach(var result in query) {
    Console.WriteLine("Name: {0}, Count: {1}", result.Name, result.Count);
}

Я не вижу, какую роль myobject.ID здесь играет. Пожалуйста, квалифицируйтесь.

21
ответ дан 1 December 2019 в 21:24
поделиться
var query = yourList
            .SelectMany(x => x.Names)
            .GroupBy(x => x, (y, z) => new { Name = y, Count = z.Count() });

// and to test...
foreach (var item in query)
{
    Console.WriteLine("{0} - {1}", item.Name, item.Count);
}
5
ответ дан 1 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

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