चाल एक स्थिर प्रकार को लागू करने के लिए है। मैं एक विजेट वर्ग है कि अपने परीक्षण डाटा शामिल कर सकते हैं बना लिया है:
public class Widget : IComparable
{
int x;
int y;
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
public Widget(int argx, int argy)
{
x = argx;
y = argy;
}
public int CompareTo(object obj)
{
int result = 1;
if (obj != null && obj is Widget)
{
Widget w = obj as Widget;
result = this.X.CompareTo(w.X);
}
return result;
}
static public int Compare(Widget x, Widget y)
{
int result = 1;
if (x != null && y != null)
{
result = x.CompareTo(y);
}
return result;
}
}
मैं, IComparable लागू किया तो यह unstably() List.Sort के अनुसार क्रमबद्ध जा सकता है।
हालांकि, मैंने स्थैतिक विधि तुलना भी लागू की, जिसे एक खोज विधि के प्रतिनिधि के रूप में पारित किया जा सकता है।
मैं C# 411 से इस प्रविष्टि प्रकार विधि उधार:
public static void InsertionSort<T>(IList<T> list, Comparison<T> comparison)
{
int count = list.Count;
for (int j = 1; j < count; j++)
{
T key = list[j];
int i = j - 1;
for (; i >= 0 && comparison(list[i], key) > 0; i--)
{
list[i + 1] = list[i];
}
list[i + 1] = key;
}
}
आप प्रकार सहायकों वर्ग है कि आप अपने प्रश्न में आपका उल्लेख में रखते हैं।
अब, यह उपयोग करने के लिए:
static void Main(string[] args)
{
List<Widget> widgets = new List<Widget>();
widgets.Add(new Widget(0, 1));
widgets.Add(new Widget(1, 1));
widgets.Add(new Widget(0, 2));
widgets.Add(new Widget(1, 2));
InsertionSort<Widget>(widgets, Widget.Compare);
foreach (Widget w in widgets)
{
Console.WriteLine(w.X + ":" + w.Y);
}
}
और यह आउटपुट:
0:1
0:2
1:1
1:2
Press any key to continue . . .
यह शायद कुछ अनाम प्रतिनिधियों से साफ किया जा सकता है, लेकिन मैं आप के लिए है कि ऊपर छोड़ देंगे।
संपादित करें: और नोबगज़ अनाम विधियों की शक्ति का प्रदर्शन करता है ...इसलिए, मेरा अधिक पुरानास्कूल मानें: पी
@Bolu मैं स्पष्ट रूप से पोस्ट संस्करण नास्तिक और अद्यतन जवाब है कि मैच के लिए बनाने के लिए टैग निकाल दिया है। यदि आपको लगता है कि 4.0/2.0 पर्याप्त महत्वपूर्ण नहीं था तो टैग को पुनर्स्थापित करने के बजाय प्रश्न में एक स्पष्ट संपादन करने पर विचार करें। –
क्षमा करें @AlexeiLevenkov, अधिक ध्यान नहीं दिया, कृपया रोल-बैक करने के लिए स्वतंत्र महसूस करें। – Bolu
ठीक है। परिवर्तन वापस कर दिया। –