चलें कहते हैं कि मैं इस काट Person
वर्ग है:सी #: Enumerable.Aggregate विधि का उपयोग कैसे करें
class Person
{
public int Age { get; set; }
public string Country { get; set; }
public int SOReputation { get; set; }
public TimeSpan TimeSpentOnSO { get; set; }
...
}
मैं तो कर सकते हैं Age
और Country
इस तरह पर समूह:
var groups = aListOfPeople.GroupBy(x => new { x.Country, x.Age });
तो मैं कर सकते हैं इस तरह की प्रतिष्ठा के साथ सभी समूहों को आउटपुट करें:
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Sum(x => x.SOReputation));
मेरा सवाल है, मैं TimeSpentOnSO
संपत्ति का योग कैसे प्राप्त कर सकता हूं? Sum
विधि इस मामले में काम नहीं करेगी क्योंकि यह केवल int
और इसी तरह के लिए है। मैंने सोचा कि मैं Aggregate
विधि का उपयोग कर सकता हूं, लेकिन केवल गंभीरता से यह नहीं समझ सकता कि इसका उपयोग कैसे किया जाए ... मैं विभिन्न संयोजनों में सभी प्रकार की गुणों और प्रकारों को आजमा रहा हूं लेकिन संकलक इसे पहचान नहीं पाएगा।
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Aggregate( what goes here?? ));
क्या मैंने पूरी विधि को पूरी तरह से गलत समझा है? या क्या चल रहा है? क्या यह कुछ और तरीका है जिसका मुझे उपयोग करना चाहिए? या मुझे TimeSpan
एस के लिए अपना खुद का Sum
संस्करण लिखना है?
और गड़बड़ी में जोड़ने के लिए, क्या होगा यदि व्यक्ति एक अज्ञात वर्ग है, उदाहरण के लिए Select
या GroupJoin
कथन?
बस पता लगा है कि मैं Aggregate
विधि काम कर सकता है अगर मैं TimeSpan
संपत्ति पहले पर एक Select
किया था ... लेकिन मैं कष्टप्रद उस तरह लगता है ... फिर भी मैं इस विधि को समझने नहीं लग रहा है बिल्कुल ...
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Select(x => x.TimeSpentOnSO)
g.Aggregate((sum, x) => sum + y));
मैं सिर्फ यह इंगित करना चाहता हूं कि कुल (कम) दुनिया में सबसे अच्छी चीजों में से एक है जिसे मैंने चलाया है परिस्थितियों जहां मैं इसका उपयोग करना चाहता था। :) –