2010-01-06 8 views
11

मैं एक वस्तु, कई गुण लेकिन केवल दो के बारे में चिंता नहीं है कर रहे हैं प्राप्त करें:अलग मदों की एक सूची और उनके गिनती है

myobject.ID जो एक int
myobject.Names जो एक HashSet

है

List<myobject> 

मैं उपयोग Linq एक तो पाने के लिए: तो फिर मैं उन वस्तुओं की एक List है कि इस के लिए कुछ इसी तरह दिखता है मुझे दोहराने वाले डेटा में, लेकिन मुझे यकीन नहीं है कि नामों की सूची कैसे प्राप्त करें और वे कितनी बार दिखाई देते हैं।

डेटा के माध्यम से लूप होने से बचने के लिए लिंक का उपयोग करना चाहते हैं।

जैसा कि मेरे टैग दिखाना चाहिए, यह सी # का उपयोग कर एएसपी.NET समाधान है।

कुछ स्पष्टीकरण:
चलें कहते हैं कि मैं अपनी सूची में सिर्फ तीन आइटम नहीं हैं: आइटम 1 जॉन, फ्रेड, जैक अपने नाम में है। आइटम 2 में जॉन, फ्रेड, जो के नाम हैं। आइटम 3 में जॉन के नाम हैं।

मैं वापस जाने के लिए कोशिश कर रहा हूँ निम्नलिखित: जॉन - 3 फ्रेड - 2 जैक - 1 जो - 1

इसके अलावा, एक नोट के रूप में मैं अपने वस्तु के लिए अपने खुद के comparer लिखने के लिए होने से परिचित हूँ , मैं बस अपने विचारों में समग्र समाधान के लिए 'कैसे करें' खो रहा हूं।

+1

हाय, जब आप कहते हैं कि "नामों की सूची कैसे प्राप्त करें और वे कितनी बार दिखाई देते हैं।" : क्या आपका मतलब है कि आप सूची में myobject के उदाहरणों की संख्या गिनना चाहते हैं, जहां 'नाम संपत्ति में एक वैध सूची (हैशसेट) में सूचक होता है; दूसरे शब्दों में, 'नाम संपत्ति का मूल्य शून्य नहीं है? या आप 'myObject' का एक नया संग्रह बनाना चाहते हैं, जिसमें केवल 'वेम्स संपत्ति' में एक वैड हैशसेट है। थोड़ा सा स्पष्टीकरण, कृपया। – BillW

+0

स्पष्टीकरण जोड़ा गया। –

उत्तर

18

यहां बताया गया है कि मैं उस समस्या को कैसे समझता हूं जिसे आप हल करने का प्रयास कर रहे हैं। आपके पास myobject एस की एक सूची है। प्रत्येक myobject में Names नामक एक संपत्ति है जो HashSetstring एस (यानी, HashSet<string>) है। आप myobject.Names में myobject.Names में दिखाई देने वाले प्रत्येक string की संख्या को गिनना चाहते हैं। यही है, आप

"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 यहाँ निभाता है। कृपया अर्हता प्राप्त करें।

+0

myobject.ID वास्तव में एक भूमिका निभाता नहीं है, मैं बस यह स्पष्ट करना चाहता था कि यह एक आसान हैशसेट ऑब्जेक्ट नहीं था। –

+0

ठीक है। तब मेरा मानना ​​है कि उपर्युक्त प्रश्न आपके प्रश्न को संबोधित करते हैं। अगर किसी को स्पष्टीकरण की आवश्यकता है तो मुझे बताएं। – jason

+1

आपके उदाहरण में समूहबी है, लेकिन एस मौजूद नहीं है। –

5
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); 
} 
संबंधित मुद्दे