इस कार्य की तरह है जिसके लिए LINQ है अच्छी तरह से अनुकूल।
पहले, आइए हम क्या कर रहे हैं निर्दिष्ट कर सकते हैं:
- मूल्य
- द्वारा आइटम समूह प्रत्येक समूह
- वापसी आइटम जिसकी समूह उच्चतम गिनती
यह है गणना क्वेरी उपर्युक्त लागू करता है:
private string GetMostFrequent(IEnumerable<string> items)
{
var itemsOrderedByCount =
from item in items
group item by item into itemGroup
orderby itemGroup.Count() descending, itemGroup.Key
select itemGroup.Key;
return itemsOrderedByCount.FirstOrDefault();
}
कार्यान्वयन उच्च स्तरीय विवरण, घोषणात्मक वाक्यविन्यास का एक अच्छा दुष्प्रभाव की तरह बहुत अधिक पढ़ता है।यहाँ प्रत्येक भाग की एक त्वरित विवरण है:
from item in items
एक पाश घोषणा की तरह है; item
लूप वैरिएबल को संदर्भित करता है।
group item by item into itemGroup
यह प्रत्येक item
को अपने मूल्य के आधार पर समूह में रखता है।
orderby itemGroup.Count() descending, itemGroup.Key
यह प्रत्येक समूह की गणना करता है और उन्हें इस प्रकार की तरह करता है कि सबसे पहले सबसे पहले होता है। यदि एक ही गिनती वाले दो समूह हैं, तो कम मूल्य चुना जाता है। (के रूप में प्रत्येक समूह के सभी एक ही मान हैं, कुंजी गिना मद है।)
select itemGroup.Key
यह कहा गया है कि प्रत्येक समूह के लिए, हम बस में गिना आइटम चाहते हैं।
return itemsOrderedByCount.FirstOrDefault();
यह आदेशित सूची में सबसे पहला आइटम (उच्चतम गिनती वाले व्यक्ति) को पकड़ता है। यदि मूल अनुक्रम खाली है, तो शून्य वापस आ गया है।
उपयोग:
var items = new[] { "BOB", "JOHN", "TOM", "TOM", "TOM" };
Assert.AreEqual("TOM", GetMostFrequent(items));