2012-12-19 20 views
7

मैं इस List<object[]>समूह और योग एक सूची <object[]>

List<object[]> olst = new List<object[]>(); 

olst.Add(new object[] { "AA1", 1 }); 
olst.Add(new object[] { "AA2", 1 }); 
olst.Add(new object[] { "AA2", 1 }); 
olst.Add(new object[] { "AA1", 1 }); 
olst.Add(new object[] { "AA1", 1 }); 

olst से, मैं इस धारण करने के लिए एक नया List<object> उत्पादन की जरूरत है: दूसरे शब्दों में

"AA1", 3 
"AA2", 2 

, मैं समूह करने की जरूरत है olst [x] [0] और olst [x] [1] योग करें।
मैं लूप के लिए उपयोग कर सकता था, लेकिन मुझे उम्मीद थी कि कोई इसे लैम्ब्डा अभिव्यक्तियों और/या linq का उपयोग करके मेरी सहायता कर सकता है।

+1

आप ऑब्जेक्ट सरणी के बजाय 'ट्यूपल ' का उपयोग करने पर विचार करना चाहेंगे। या इन मानों को संभालने के लिए अपनी खुद की कक्षा लिखें। इस तरह आपके पास मजबूत टाइपिंग होगी और उसे करने की आवश्यकता नहीं होगी। – juharr

उत्तर

6

उपयोग GroupBy और Select:

List<object[]> newList = olst 
    /* Group the list by the element at position 0 in each item */ 
    .GroupBy(o => o[0].ToString()) 
    /* Project the created grouping into a new object[]: */ 
    .Select(i => new object[] 
    { 
     i.Key, 
     i.Sum(x => (int)x[1]) 
    }) 
    .ToList(); 
1

यह आपको एक ही पहले मान के साथ दूसरे मानों का योग करने के लिए पहले मूल्य से एक शब्दकोश मानचित्रण में सूची हो जाएगा।

var result = olst.GroupBy(entry => (String)entry[0]) 
       .Select(group => new Object[] 
            { 
             group.Key, 
             group.Sum(item => (Int32)item[1]) 
            }) 
       .ToList(); 

मैं भाग परिणाम बताते हुए प्रकार List<Object>Object[] युक्त होना चाहिए याद किया। यह मदद करेगा अगर डाउनवॉटर इस बारे में एक टिप्पणी छोड़ देंगे। ;)