`
javatome
  • 浏览: 843190 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

数组元素IComparer,IComparable接口的实现

 
阅读更多

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);

}

}

}

分享到:
评论

相关推荐

    做一个集合类,并按索引二分法查找,继承IComparer、IComparable、ICollection

    在.NET框架中,`IComparer`、`IComparable`和`ICollection`接口是面向对象编程中常见的接口,用于实现自定义排序、比较和集合管理。本文将深入探讨这些接口的用法以及如何在一个集合类中实现它们,同时结合二分法...

    C#程序设计-3期(KC008) KC008110200014_如何排序数组中元素.docx

    此方法主要依赖于数组中元素的`IComparable`接口实现。`IComparable`是一个接口,它定义了一个比较方法,使得任何实现了该接口的对象可以与其他对象进行比较。在C#中,基本类型如int、double等都默认实现了`...

    C#基础之数组排序、对象大小比较实现代码

    总结来说,C#中的数组排序主要依赖于`Array.Sort()`方法,对于内置类型,排序可以直接进行,而对于自定义类,需要确保类实现了`IComparable`或使用`IComparer<T>`接口来指定比较规则。这使得我们可以根据实际需求对...

    C#简单排序——Sort(2005)

    如果数组包含自定义类型,`Array.Sort()`会使用该类型的`IComparable`接口来排序。 2. **ListViewItem.Sort()** 在Windows Forms开发中,`ListView`控件用于显示列表数据。`ListViewItem.Sort()`方法允许我们对`...

    .Net中C#接口中Sort方法的使用

    4. 如果是自定义类的实例,需要确保类实现了`IComparable<T>`接口,或者提供一个自定义的`IComparer<T>`,以便`Sort`方法知道如何比较对象。 在`体检套餐维护系统`这样的应用中,`Sort`方法可能用于整理和排序用户...

    Array sort.rar

    这个方法能够对任何实现了`IComparable`接口的对象数组进行排序,或者对值类型数组进行默认的比较器排序。例如,对于整型数组,`Array.Sort(int[])`将按升序排列数组元素。如果需要自定义排序规则,可以传递一个...

    vb2010源代码

    如果元素是自定义类型,需要实现IComparable接口。 9. **转换到其他类型**: 如果需要将ArrayList转换为其他类型(如数组),可以使用ToArray方法: ```vb Dim array As Object() = myList.ToArray(GetType...

    利用 Array.Sort()函数对数组排序

    如果需要基于自定义规则进行排序,可以提供一个`IComparer<T>`接口实现的实例作为`Array.Sort()`的第二个参数: ```csharp class CustomComparer : IComparer { public int Compare(int x, int y) { return y....

    C# 输入字母+数字 冒泡法 按升序分别排列并输出

    - C#中的`IComparable<T>`接口或`Comparison<T>`委托可以用来定义自定义的比较规则。在这种情况下,我们可以创建一个方法来处理字符串中数字和字母的比较逻辑,然后将其作为参数传递给`Array.Sort()`或`List<T>....

    c#经典排序

    这个方法会使用默认的IComparable接口或自定义的比较器对元素进行排序。例如,对于自定义类的列表,你需要确保类实现了`IComparable`接口,并提供`CompareTo()`方法来定义排序规则。 3. **快速排序、归并排序和插入...

    数据结构(C#语言版)

    此外,可以使用IComparable<T> 或 IComparer<T> 接口自定义比较逻辑。 8. **堆**:堆是一种特殊的树形数据结构,C#中的PriorityQueue, TPriority> 类实现了优先队列,可以快速找到最大或最小元素。 9. **图**:图...

    lab2-ArrayShift

    - 自定义排序:如果需要自定义排序规则,可以实现`IComparable`接口或提供比较器(`Comparison<T>`或`IComparer<T>`)。 3. **插入排序算法** - 插入排序:在有序数组中插入新元素,通常采用两步操作:将新元素与...

    C#泛型优先队列

    2. **比较器**:使用`IComparer<T>`接口或`Comparison<T>`委托来定义元素之间的比较规则。默认情况下,C#中的`IComparable<T>`接口可用于具有自然排序的类型。 3. **插入操作**:将新元素添加到队列,同时保持堆的...

    C# xml处理和排序

    - **自定义排序**:如果需要自定义排序规则,可以传递一个Comparison委托或IComparer接口实现给Sort()方法。例如,按字符串长度排序: ```csharp List<string> words = new List<string> { "apple", "banana", ...

    2024年 C# sort面试题目

    - **实现 `IComparable<T>` 接口**:这种方式适用于单个类的所有实例都需要按照某种特定顺序排列的情况。你需要重写 `CompareTo` 方法来定义对象之间的比较逻辑。 - **提供 `IComparer<T>` 实例**:这种方式更为灵活...

    C#重要知识之——泛型列表List例子

    3. 排序:`List<T>`提供`Sort()`方法,对于实现了`IComparable<T>`接口的类型,可以直接排序。若需要自定义排序规则,可以传递一个比较器`Comparison<T>`或`IComparer<T>`实例。 4. 分割与合并:`List<T>.Split()`...

    c# List类排序方法

    这是因为`Sort()`方法默认使用元素的自然顺序进行排序,但我们的`Student`类并没有实现`IComparable<T>`接口,因此无法确定两个`Student`对象之间的顺序关系。如果直接调用`Sort()`方法,将会引发`System....

    C#中Arraylist的sort函数用法实例分析

    默认情况下,如果元素实现了IComparable接口,它会使用每个元素的CompareTo方法进行排序。例如,字符串会按照字典顺序排序。 2. 带一个IComparer参数的Sort(IComparer comparer)方法: 这个版本的Sort()允许你传入...

Global site tag (gtag.js) - Google Analytics