簡體   English   中英

獲取不同項目及其計數的列表

[英]Get a list of distinct items and their count

我有一個對象,它有許多屬性但只有兩個需要擔心的是:

myobject.ID是一個int
myobject.Names是一個HashSet

然后我有一個List ,看起來像這樣的對象:

List<myobject>

我使用Linq將一些數據轉換為轉發器,但我不知道如何獲取名稱列表以及它們出現的頻率。

想要使用Linq以避免必須遍歷數據。

正如我的標簽應該顯示的那樣,這是一個使用C#的ASP.NET解決方案。

一些澄清:
假設我的列表中只有三個項目:項目1中有John,Fred,Jack的名字。 第2項有John,Fred,Joe的名字。 第3項約翰的名字。

我試圖返回以下內容:John - 3 Fred - 2 Jack - 1 Joe - 1

另外,作為一個注釋我熟悉必須為我的對象編寫我自己的比較器,我只是錯過了我的想法中整體解決方案的“如何”。

以下是我如何理解您要解決的問題。 你有一個myobject列表。 每個myobject都有一個名為Names的屬性,它是一個string s的HashSet (即HashSet<string> )。 您想要計算在某些myobject.Names出現的每個string出現在所有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

如果是這樣:

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在這里扮myobject.ID 請符合資格。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM