using System;
using System.Collections;
namespace MyPractise.MyArray.ReachSort
{
class Program
{
static void Main(string [] args)
{
ArrayItem firstArrayItem = new ArrayItem ();
ArrayItem secondArrayItem = new ArrayItem ();
firstArrayItem.FirstItem = "xxx" ;
firstArrayItem.SecondItem = "yyy" ;
secondArrayItem.FirstItem = "yyyy" ;
secondArrayItem.SecondItem = "xxxx" ;
ArrayItem [] myArray = new ArrayItem [2];
myArray[0] = firstArrayItem;
myArray[1] = secondArrayItem;
//Set an array instance item so that Sort() can recognize the compare type.
//Compare() is the current item compare type.
Array .Sort(myArray, new ArrayItem (ArrayItem .CompareType .SecondItem));
Console .WriteLine("First Sort..." );
foreach (ArrayItem arrayItem in myArray)
{
Console .WriteLine("FirstItem:{0},SecondItem:{1}" ,arrayItem.FirstItem,arrayItem.SecondItem);
}
//CompareTo() is the current item compare type.
Array .Sort(myArray);
Console .WriteLine("Sort Again..." );
foreach (ArrayItem arrayItem in myArray)
{
Console .WriteLine("FirstItem:{0},SecondItem:{1}" , arrayItem.FirstItem, arrayItem.SecondItem);
}
Console .ReadKey();
}
}
//Assert the interface IComparer
class ArrayItem : IComparer ,IComparable
{
public enum CompareType
{
FirstItem,
SecondItem
}
public string FirstItem { get ; set ; }
public string SecondItem { get ; set ; }
public CompareType CurrentCompareType { get ; set ; }
public ArrayItem(CompareType currentCompareType)
{
this .CurrentCompareType = currentCompareType;
}
public ArrayItem()
{
this .CurrentCompareType = CompareType .FirstItem;
}
//Assert the method of Interface IComparer
public int Compare(object x, object y)
{
ArrayItem firstCompareItem = (ArrayItem )x;
ArrayItem secondCompareItem=(ArrayItem )y;
switch (CurrentCompareType)
{
case CompareType .FirstItem:
return firstCompareItem.FirstItem.CompareTo(secondCompareItem.FirstItem);
case CompareType .SecondItem:
return firstCompareItem.SecondItem.CompareTo(secondCompareItem.SecondItem);
default :
throw new ArgumentException ("Unexpected compare type, please have a double check for your array item." );
}
}
//Assert the method of Interface IComparable
public int CompareTo(object obj)
{
ArrayItem compareItemInstance = (ArrayItem )obj;
return FirstItem.CompareTo(compareItemInstance.FirstItem);
}
}
}
分享到:
相关推荐
在.NET框架中,`IComparer`、`IComparable`和`ICollection`接口是面向对象编程中常见的接口,用于实现自定义排序、比较和集合管理。本文将深入探讨这些接口的用法以及如何在一个集合类中实现它们,同时结合二分法...
此方法主要依赖于数组中元素的`IComparable`接口实现。`IComparable`是一个接口,它定义了一个比较方法,使得任何实现了该接口的对象可以与其他对象进行比较。在C#中,基本类型如int、double等都默认实现了`...
总结来说,C#中的数组排序主要依赖于`Array.Sort()`方法,对于内置类型,排序可以直接进行,而对于自定义类,需要确保类实现了`IComparable`或使用`IComparer<T>`接口来指定比较规则。这使得我们可以根据实际需求对...
如果数组包含自定义类型,`Array.Sort()`会使用该类型的`IComparable`接口来排序。 2. **ListViewItem.Sort()** 在Windows Forms开发中,`ListView`控件用于显示列表数据。`ListViewItem.Sort()`方法允许我们对`...
4. 如果是自定义类的实例,需要确保类实现了`IComparable<T>`接口,或者提供一个自定义的`IComparer<T>`,以便`Sort`方法知道如何比较对象。 在`体检套餐维护系统`这样的应用中,`Sort`方法可能用于整理和排序用户...
这个方法能够对任何实现了`IComparable`接口的对象数组进行排序,或者对值类型数组进行默认的比较器排序。例如,对于整型数组,`Array.Sort(int[])`将按升序排列数组元素。如果需要自定义排序规则,可以传递一个...
如果元素是自定义类型,需要实现IComparable接口。 9. **转换到其他类型**: 如果需要将ArrayList转换为其他类型(如数组),可以使用ToArray方法: ```vb Dim array As Object() = myList.ToArray(GetType...
如果需要基于自定义规则进行排序,可以提供一个`IComparer<T>`接口实现的实例作为`Array.Sort()`的第二个参数: ```csharp class CustomComparer : IComparer { public int Compare(int x, int y) { return y....
- C#中的`IComparable<T>`接口或`Comparison<T>`委托可以用来定义自定义的比较规则。在这种情况下,我们可以创建一个方法来处理字符串中数字和字母的比较逻辑,然后将其作为参数传递给`Array.Sort()`或`List<T>....
这个方法会使用默认的IComparable接口或自定义的比较器对元素进行排序。例如,对于自定义类的列表,你需要确保类实现了`IComparable`接口,并提供`CompareTo()`方法来定义排序规则。 3. **快速排序、归并排序和插入...
此外,可以使用IComparable<T> 或 IComparer<T> 接口自定义比较逻辑。 8. **堆**:堆是一种特殊的树形数据结构,C#中的PriorityQueue, TPriority> 类实现了优先队列,可以快速找到最大或最小元素。 9. **图**:图...
- 自定义排序:如果需要自定义排序规则,可以实现`IComparable`接口或提供比较器(`Comparison<T>`或`IComparer<T>`)。 3. **插入排序算法** - 插入排序:在有序数组中插入新元素,通常采用两步操作:将新元素与...
2. **比较器**:使用`IComparer<T>`接口或`Comparison<T>`委托来定义元素之间的比较规则。默认情况下,C#中的`IComparable<T>`接口可用于具有自然排序的类型。 3. **插入操作**:将新元素添加到队列,同时保持堆的...
- **自定义排序**:如果需要自定义排序规则,可以传递一个Comparison委托或IComparer接口实现给Sort()方法。例如,按字符串长度排序: ```csharp List<string> words = new List<string> { "apple", "banana", ...
- **实现 `IComparable<T>` 接口**:这种方式适用于单个类的所有实例都需要按照某种特定顺序排列的情况。你需要重写 `CompareTo` 方法来定义对象之间的比较逻辑。 - **提供 `IComparer<T>` 实例**:这种方式更为灵活...
3. 排序:`List<T>`提供`Sort()`方法,对于实现了`IComparable<T>`接口的类型,可以直接排序。若需要自定义排序规则,可以传递一个比较器`Comparison<T>`或`IComparer<T>`实例。 4. 分割与合并:`List<T>.Split()`...
这是因为`Sort()`方法默认使用元素的自然顺序进行排序,但我们的`Student`类并没有实现`IComparable<T>`接口,因此无法确定两个`Student`对象之间的顺序关系。如果直接调用`Sort()`方法,将会引发`System....
默认情况下,如果元素实现了IComparable接口,它会使用每个元素的CompareTo方法进行排序。例如,字符串会按照字典顺序排序。 2. 带一个IComparer参数的Sort(IComparer comparer)方法: 这个版本的Sort()允许你传入...