में सूची न्यूनतम/अधिकतम गणना करने के लिए मैं की तरहसबसे छोटा कोड नेट
int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);});
कुछ करना चाहते हैं वहाँ .NET में यह करने के लिए अंतर्निहित तरीका है?
में सूची न्यूनतम/अधिकतम गणना करने के लिए मैं की तरहसबसे छोटा कोड नेट
int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);});
कुछ करना चाहते हैं वहाँ .NET में यह करने के लिए अंतर्निहित तरीका है?
इन में देखने का प्रयास:
जब तक आपके वर्ग को लागू करता है IComparable, तुम सब करने की ज़रूरत है:
List<MyClass> list = new List();
//add whatever you need to add
MyClass min = list.Min();
MyClass max = list.Max();
LINQ का उपयोग कर आप न्यूनतम() और अधिकतम() फ़ंक्शन।
तो आपको लगता है कि "मैं 2 में अब भी कर रहा हूँ" list.AsQueryable().Min();
माइनर: AsQueryable() के लिए कोई आवश्यकता नहीं है ... –
मुझे पता नहीं था कि सूची <> न्यूनतम और अधिकतम कार्य था। आप यहां हर दिन कुछ नया सीखते हैं! :-) –
आप ध्यान दें कर सकते हैं - आप, तो, LINQBridge को देखने के लिए चाहते हो सकता है। यह वास्तव में सी # 3.0 और .NET 2.0 के उद्देश्य से है, लेकिन आप के साथ उपयोग करने में सक्षम होना चाहिए सी # 2.0 और .NET 2.0 - ठीक वैसे ही लंबे समय से हाथ का उपयोग करना होगा:
MyClass min = Enumerable.Min(list),
max = Enumerable.Max(list);
बेशक
, यदि आप सी # 3.0 (अभी भी .NET 2.0 को लक्षित कर रहे हैं) पर स्विच कर सकते हैं तो यह आसान होगा।
और अगर LINQBridge एक विकल्प नहीं है, तो आप इसे अपने आप को लागू कर सकते हैं:
static void Main()
{
int[] data = { 3, 5, 1, 5, 5 };
int min = Min(data);
}
static T Min<T>(IEnumerable<T> values)
{
return Min<T>(values, Comparer<T>.Default);
}
static T Min<T>(IEnumerable<T> values, IComparer<T> comparer)
{
bool first = true;
T result = default(T);
foreach(T value in values) {
if(first)
{
result = value;
first = false;
}
else
{
if(comparer.Compare(result, value) > 0)
{
result = value;
}
}
}
return result;
}
मैंने इसे कार्यान्वित कर दिया - मेरा मानना है कि मेरा कोड बिल्कुल आपके स्निपेट की तरह है। क्या आपने इसे अपने स्रोत नियंत्रण से लिया था? :) – ripper234
ठीक है, यदि आप .NET 3.5 उपयोग नहीं कर सकते, तो आप हमेशा सूची को सॉर्ट और फिर लौट सूची [0 सकता है ]। यह सबसे तेज़ तरीका नहीं हो सकता है, लेकिन शायद यह सबसे छोटा कोड है, खासकर यदि आपकी कक्षा पहले ही आईसीओपरपेबल लागू करती है।
List<SomeClass> list = new List<SomeClass>();
// populate the list
// assume that SomeClass implements IComparable
list.Sort();
return list[0]; // min, or
return list[list.Count - 1]; // max
यह भी निश्चित रूप से मान लिया गया है, यह कोई बात नहीं है कि जो आइटम आप अगर आप एक से अधिक आइटम है कि न्यूनतम या अधिकतम रहे हैं वापस जाएँ।
अपनी कक्षा IComparable को लागू नहीं करता है, तो आप एक अनाम प्रतिनिधि में कुछ इस तरह पारित कर सकते हैं,:
list.Sort(delegate(SomeClass x, SomeClass y) { return string.Compare(x.Name, y.Name); });
मैं सहमत हूं, मुझे यह पसंद है ... विशेष रूप से यह तथ्य है कि वह 2.0 में है। Upvoted! – Ken
लघु कोड मेरे लिए एक मीट्रिक नहीं है। अपना कोड यथासंभव स्पष्ट और पठनीय बनाएं। आप प्रति पंक्ति का भुगतान नहीं करते हैं;)। – Tigraine