欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 数组查找与排序实现代码

程序员文章站 2024-03-08 21:49:16
1. 查找对象 复制代码 代码如下: person p1 = new person( " http://www.my400800.cn " , 18 ); person p...
1. 查找对象
复制代码 代码如下:

person p1 = new person( " http://www.my400800.cn " , 18 );
person p2 = new person( " http://www.my400800.cn " , 19 );
person p3 = new person( " http://www.my400800.cn " , 20 );
person[] persons = ... { p1, p2, p3 } ;
// 查找p2所在数组中的位置
array.indexof < person > (persons, p2);

2. 查找值
复制代码 代码如下:

person p1 = new person( " http://www.my400800.cn " , 18 );
person p2 = new person( " http://blog.my400800.cn " , 19 );
person p3 = new person( " http:// blog.my400800.cn/400电话 " , 20 );
person[] persons = ... { p1, p2, p3 } ;
person p4 = new person(p2.name, p2.age);
// 查找数组中与p4相同的元素所在的位置
array.indexof < person > (persons, p4);

但是,这种方法必需使person重载object的 equals 比较方法
复制代码 代码如下:

public override bool equals( object obj)
... {
person person = obj as person;
if (person == null ) return false ;
return ( this .name == person.name && this .age == person.age);
}

第二种按对象的值查找的方法
实现icomparabler接口
复制代码 代码如下:

public int compareto( object obj)
... {
person person = obj as person;
if (person == null )
throw new exception( " the method or operation is not implemented. " );
// 先从年龄开始比较
int ageresult = this .age.compareto(person.age);
if (ageresult == 0 )
... {
// 如果年龄相等在坐姓名比较
return this .name.compareto(person.name);
}
else
... {
return ageresult;
}
}

实现了icomparable接口后就可以使用array.binarysearch()进行查找了
复制代码 代码如下:

// 得到 person 在 persons 中有相同值的下标
// 如果多个相同的值,binarysearch将取最后
// 一个有相同值的数组下标
array.binarysearch < person > (persons, person);

注:使用array.binaryseach必须操作一个排序好的数组
3. 排序
只要对象实现了icomparable接口,就可以使用array中静态的方法sort进行排序
复制代码 代码如下:

// 必需使比较的对象实现icomparable接口
array.sort < person > (persons);