2012-03-14 21 views
8

मैं एक बहुत ही सरल List<string> सेटअप जो प्रति मद एकल अक्षर के बहुत सारे शामिल है (आईई एक foreach "एक" "कश्मीर" "पी" आदि के लिए बाहर सांत्वना होगा)सूची <string> सरल समूह और गणना?

मैं क्या करना चाहते हैं क्या है में सक्षम हो समूह के लिए वस्तुओं और भी गिनती प्रत्येक में से कितने तो मैं एक निर्गम के लिए इसी तरह मिलता था होता है:

a - 2 
t - 3 
y - 3 

यह करने के लिए सबसे अच्छा तरीका है पर कोई सुझाव दिए गए?

मैं नेट 4 का उपयोग कर रहा है कि अगर किसी भी मदद के लिए है।

उत्तर

32

(यह देखते हुए कि प्रत्येक प्रविष्टि एक भी चरित्र है, वहाँ किसी भी कारण से आप जिस तरह से एक List<char> नहीं है?)

कैसे के बारे में:

// To get a Dictionary<string, int> 
var counts = list.GroupBy(x => x) 
       .ToDictionary(g => g.Key, g => g.Count()); 

// To just get a sequence 
var counts = list.GroupBy(x => x) 
       .Select(g => new { Text = g.Key, Count = g.Count() }); 

ध्यान दें कि यह कुछ हद तक अक्षम है आंतरिक प्रतिनिधित्व के मामले में। आप निश्चित रूप से इसे और अधिक कुशलता से "मैन्युअल" कर सकता है, लेकिन यह भी अधिक काम ले जाएगा। जब तक आपकी सूची बड़ी है, मैं इस पर कायम हैं।

8

यह करने के लिए सबसे आसान तरीका है Linq उपयोग कर रहा है

var list = new[] { "a", "a", "b", "c", "d", "b" }; 
var grouped = list 
    .GroupBy(s => s) 
    .Select(g => new { Symbol = g.Key, Count = g.Count() }); 

foreach (var item in grouped) 
{ 
    var symbol = item.Symbol; 
    var count = item.Count; 
} 
2
var list = new[] {"a", "t", "t", "y", "a", "y", "y", "t"}; 
var result = (from item in list 
       group item by item into itemGroup 
       select String.Format("{0} - {1}", itemGroup.Key, itemGroup.Count())); 
संबंधित मुद्दे