Get a list of distinct items and their count

冷暖自知 提交于 2019-12-03 16:21:11

问题


I have an object, that has many properties but the only two to worry about are:

myobject.ID which is an int
myobject.Names which is a HashSet

Then I have a List of those objects that looks something similar to this:

List<myobject>

I use Linq to get a some of the data into a repeater, but I'm not sure how to get the list of Names and how often they show up.

Want to use Linq to avoid having to loop through the data.

As my tags should show, this is an ASP.NET solution using C#.

Some clarification:
Lets say I have just three items in my list: Item 1 has John, Fred, Jack in its names. Item 2 has John, Fred, Joe in its names. Item 3 has John in its names.

I am trying to return the following: John - 3 Fred - 2 Jack - 1 Joe - 1

Also, as a note I am familiar with having to write my own comparer for my object, I'm just missing the 'how to' for the overall solution in my thoughts.


回答1:


Here is how I understand the problem that you are trying to solve. You have a list of myobjects. Each myobject has a property called Names which is a HashSet of strings (i.e., HashSet<string>). You want to count the number of times each string that appears in some myobject.Names appears in all the myobject.Names. That is, you have

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

as three myobject.Names and you want to see

"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);
}

I do not see what role myobject.ID plays here. Please qualify.




回答2:


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);
}


来源:https://stackoverflow.com/questions/2010556/get-a-list-of-distinct-items-and-their-count

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!