C#数组查找与排序
来源:互联网 发布:乐视视频网络连接异常 编辑:程序博客网 时间:2024/05/10 06:20
数组查找对象的方法一种是查找对象,一种是查找值
1. 查找对象
Person p1 = new Person("名字1", 18);
Person p2 = new Person("名字1", 19);
Person p3 = new Person("名字1", 20);
Person[] persons = ...{ p1, p2, p3 };
// 查找p2所在数组中的位置
Array.IndexOf<Person>(persons, p2);
Person p2 = new Person("名字1", 19);
Person p3 = new Person("名字1", 20);
Person[] persons = ...{ p1, p2, p3 };
// 查找p2所在数组中的位置
Array.IndexOf<Person>(persons, p2);
2. 查找值
Person p1 = new Person("名字1", 18);
Person p2 = new Person("名字1", 19);
Person p3 = new Person("名字1", 20);
Person[] persons = ...{ p1, p2, p3 };
Person p4 = new Person(p2.Name, p2.Age);
// 查找数组中与p4相同的元素所在的位置
Array.IndexOf<Person>(persons, p4);
Person p2 = new Person("名字1", 19);
Person p3 = new Person("名字1", 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);
}
...{
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;
}
}
...{
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);
// 如果多个相同的值,BinarySearch将取最后
// 一个有相同值的数组下标
Array.BinarySearch<Person>(persons, person);
注:使用Array.BinarySeach必须操作一个排序好的数组
3. 排序
只要对象实现了IComparable接口,就可以使用Array中静态的方法Sort进行排序
// 必需使比较的对象实现IComparable接口
Array.Sort<Person>(persons);
Array.Sort<Person>(persons);
代码下载
- C#数组查找与排序
- C#数组查找与排序
- C#数组查找与排序
- 数组排序与查找
- 数组排序与查找
- 数组的排序与查找
- Java基础05-数组排序与查找
- java数组排序,查找与置换
- 数据结构与算法练习-数组查找,排序
- 17、java数组查找与交换排序及快速排序
- 17、java数组查找与交换排序及快速排序
- 旋转排序数组查找
- 数组排序、查找
- 数组排序、查找
- c#数组查找元素
- C# 数组元素查找
- C# 数组查找
- 黑马程序员 java基础 函数 数组 查找与排序总结
- 古代武侠武功与现代软件开发
- 特殊的短信,如果是你你会怎么做?
- 一次面试经历
- J2EE 和 Ruby on Rails 的选择
- Tomcat 结构概述
- C#数组查找与排序
- Missing message for key "XXX"
- MS SQL Server中的日期格式化大全
- 笑死人不偿命:最新经典MSN签名档
- 闲扯原码、反码、补码
- 今天开始在CSDN上搞BLOG
- final finally finalize 的区别
- DOS命令淘金——ECHO命令的使用
- cf日期函数操作补漏