2011-11-21 25 views
0

我有一個包含重複的列表,我想創建一個顯示他們排名的輸出。例如tom在頂部,因爲他有100個條目,lilly在底部,因爲它有0個。顯示大多數發生在等級順序中#

是否可以顯示一個列表,列表中列出了列表中的列表,並且列表中列出了他們出現在列表中的列表的次數?

還顯示它們在它們旁邊顯示的次數?

+0

你使用什麼樣的數據結構?這可以通過許多方式完成;最簡單的可能是使用「桶排序」來處理這種類型的東西。 – bchurchill

+0

「和莉莉在底部,因爲它有0」:現在這真的讓我的心靈... – Zruty

+0

禮來只出現過一次,但湯姆出現100次所以實際上我想要統計它出現的次數並顯示它們在那個等級。 – Evildommer5

回答

0
var query = File 
    .ReadLines("input.txt") 
    .GroupBy(x => x) 
    .Select(g => new { Key = g.Key, Count = g.Count() }) 
    .OrderByDescending(i => i.Count) 
    .Take(20); 

foreach (var item in query) 
{ 
    Console.WriteLine("{0,5} {1}", item.Count, item.Key); 
} 
+0

是否可以顯示結果的前20行? – Evildommer5

+0

@ Evildommer5:是的。我已經擴展了我的答案。 – dtb

+0

這不能編譯。不要在System.IO – Evildommer5

0
var groups = list.GroupBy(item => item); 
var orderedGroups = groups.OrderByDescending(group => group.Count()); 
foreach (var group in orderedGroups) 
{ 
    Console.WriteLine(string.Format("{0} - {1}", group.Key, group.Count()); 
} 
+0

VC 74-我收到一個錯誤說,鏈接不會出現在當前的上下文中。有什麼建議麼? – Evildommer5

+0

@ Evildommer5,請爲System.Linq添加一個使用。 –

1

以下將給出IEnumerable其中每個項目包含來自組的代表性項目及其發生次數。

myList 
    .GroupBy(item => item.Name) 
    .OrderByDescending(g => g.Count()) 
    .Select(g => new {item=g.First(), numOcurrences=g.Count()) 
0

這裏有一個簡單的LINQ查詢遠程做到這一點。

List<string> list = new List<string> { "a", "b", "a", "c", "a", "d", "c" }; 
var counts = from item in list 
      group item by item 
       into grp 
       orderby grp.Count() descending 
       select new 
          { 
           Value = grp.Key, 
           Count = grp.Count() 
          }; 
foreach (var item in counts) 
    Console.WriteLine("{0} ({1})", item.Value, item.Count);