2010-01-09 145 views
0

我有一個標籤列表,其中包含重複標籤列表,如「tag1」,「tag1」,「tag2」,「tag3」,「tag3」和「tag2」。標籤雲算法(計算)

我想計算列表中有多少個tag1,tag2和tag3,然後將它們添加到一個新的標記列表中,如var tagList = new List<Tag>(),它將在列表中包含數千個標記。任何人都可以幫助我以有效的方式實現這一目標嗎?該列表應該有標籤名稱和標籤數量(計數)。

這裏是我的Tag類屬性:

public int TagID { get; set; } 
    public string TagName { get; set; } 
    public int TagCount { get; set; } 

非常感謝。

回答

2

我無法從你的描述判斷你是否有代表標籤或代表所以這裏的標籤的IEnumerable<Tag>IEnumerable<string>是兩個辦法:

對於Tag情況:

List<Tag> tags = new List<Tag>() { 
    new Tag() { TagName = "tag1" }, 
    new Tag() { TagName = "tag1" }, 
    new Tag() { TagName = "tag2" }, 
    new Tag() { TagName = "tag3" }, 
    new Tag() { TagName = "tag3" }, 
    new Tag() { TagName = "tag2" } 
}; 
var tagList = tags.GroupBy(t => t.TagName) 
        .Select(g => new Tag() { 
         TagName = g.Key, 
         TagCount = g.Count() 
        }) 
        .ToList(); 

對於string情況:

List<string> list = new List<string>() { 
    "tag1", 
    "tag1", 
    "tag2", 
    "tag3", 
    "tag3", 
    "tag2" 
}; 
var tagList = list.GroupBy(s => s) 
        .Select(g => new Tag() { 
         TagName = g.Key, 
         TagCount = g.Count() 
        }) 
        .ToList(); 

在這兩種情況下,我使用的定義

class Tag { 
    public int TagID { get; set; } 
    public string TagName { get; set; } 
    public int TagCount { get; set; } 
} 
+0

嗨Jason,謝謝!但標籤清單是列表而不是列表。 :) – 2010-01-09 15:03:00

+0

@DotNet用戶:解決。 – jason 2010-01-09 15:04:30

+0

非常感謝Jason。我現在明白這一點。在團隊中有沒有什麼事情可以忽略呢? – 2010-01-09 17:18:16

0

如果我理解你的問題,我認爲這會奏效。您想按標籤ID和名稱進行分組,然後對現有列表中每個標籤的計數進行總計。

var tagList = existingList.GroupBy(t => new { t.TagID, t.TagName }) 
          .Select(g => new Tag { 
             TagID = g.Key.TagID, 
             TagName = g.Key.TagName, 
             TagCount = g.Sum(t => t.TagCount) 
          }) 
          .ToList(); 
+0

謝謝@tvanfosson。 – 2010-01-09 18:45:21