ArrayList 排序Sort()方法扩展
1、sort()
sort可以直接对默认继承 IComparable接口的类进行排序,如:int、string....
ArrayList arrayList = new ArrayList();
int[] arr = new int[] { , , , , , , , ,};
arrayList.AddRange(arr);
arrayList.Sort();
//结果输出结果:123456789
2、Sort()对自定义类进行排序
对自定义进行排序,该类必须实现IComparable或者使用“比较器”。
实现接口
class Person : IComparable
{
public string Name { get; set; } public int Age { get; set; } public int CompareTo(object obj)
{
Person p = obj as Person;
if (p == null)
{
throw new ArgumentException();
}
else
{
return this.Age-p.Age;
}
}
}
//这样就可以 p.Sort()排序了,与int、string一样了
比较器 比较器需实现IComparer接口
class PersonSortByAgeAsc : IComparer
{ #region IComparer 成员 public int Compare(object x, object y)
{
Person p1 = x as Person;
Person p2 = y as Person;
if (p1 != null && p2 != null)
{
return p1.Age - p2.Age;
}
else
{
throw new ArgumentException();
}
} #endregion
}
//使用比较器
arr.Sort(new PersonSortByAgeAsc());
下面是全部代码,注释的比较乱
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections; namespace _03集合
{
class Program
{
static void Main(string[] args)
{
#region ArrayList集合,类似于一个object数组 ArrayList arrayList = new ArrayList(); // ////增加元素
// //arrayList.Add(1);
// //arrayList.Add(99.9);
// //arrayList.Add("hello");
// //Person p = new Person();
// //p.Name = "张三";
// //arrayList.Add(p);
// //arrayList.Add(false); // ////在指定索引处插入一个新元素
// arrayList.Insert(0, "============"); // int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// string[] names = new string[] { "乔丹", "科比", "韦德" };
//arrayList.AddRange(arr);
// arrayList.AddRange(names);
// //ArrayList arrList2 = new ArrayList();
// //arrList2.Add("中国");
// //arrList2.Add("美国");
// //arrList2.Add("韩国"); // ////通过调用AddRange()把另一个数组或者集合加到当前arrayList中。
// //arrayList.AddRange(arrList2); // ////清空集合
// //arrayList.Clear(); // //Console.WriteLine("循环遍历集合中每一个元素的内容:"); // ////循环遍历元素
// ////ArrayList可以通过下标来访问,原因就是ArrayList中有一个索引器
// for (int i = 0; i < arrayList.Count; i++)
// {
// Console.WriteLine(arrayList[i].ToString());
// } ////默认创建好一个空的ArrayList后,Count是0.
////Count表示,集合中实际元素的个数。
////Capacity表示容量。
//Console.WriteLine(arrayList.Count + "============" + arrayList.Capacity);
//Console.ReadKey(); //string[] n = new string[] { "a", "b", "c" }; //Array.Clear(n, 0, n.Length); //Console.WriteLine(n.Length);
//for (int i = 0; i < n.Length; i++)
//{
// Console.WriteLine(n[i]+"★");
//}
//Console.ReadKey(); //RemoveAt
//集合初始化器
//ArrayList arrList = new ArrayList() { 1, 2, 3, 4, 5, 6, "aaa", false, 99.9 }; //arrList.RemoveAt(0);
//arrList.RemoveAt(1);
//arrList.RemoveAt(2); //for (int i = 0; i < arrList.Count; i++)
//{
// Console.WriteLine(arrList[i]);
//} ////要想清空集合,不能这么删除,因为集合的Count是可以动态改变大小的。
//for (int i = 0; i < arrList.Count; i++)
//{
// arrList.RemoveAt(i);
//} //ArrayList arrList = new ArrayList() { 1, 2, 3, 4, 5, 6, "aaa", false, 99.9, new Person() { Name = "张三" } }; ////把一个集合转换成一个数组
//object[] objs = arrList.ToArray(); ////根据元素内容来删除,内部是通过调用元素Equals()方法来实现的比较,所以只要Equals()方法返回值为true,则认为这两个值相等,值相等的,就可以被删除。
//arrList.Remove(1);
//arrList.Remove(2);
//arrList.Remove(3);
//string a = new string(new char[] { 'a', 'a', 'a' });
//Person p1 = new Person() { Name = "张三" }; //arrList.Remove(a);
//arrList.Remove(p1);//这个元素没有删除?? //////Contains()方法内部判断两个值是否相等,也是通过Equals()方法来判断的。
////if (arrList.Contains(1))
////{ ////} //for (int i = 0; i < arrList.Count; i++)
//{
// Console.WriteLine(arrList[i]);
//} ////Console.WriteLine(arrList.Count);//?????
//Console.ReadKey(); #endregion //string
#region ArrayList的Sort排序方法 ////ArrayList arr = new ArrayList() { 0, 8, 32, 3, 4, 2, 432, 5, 234, 54323, 875, 45 };
////ArrayList arr = new ArrayList() { "Alice", "Wayen", "Chris", "Jerry", "Tom", "John", "Bob", "James", "Steve" }; //ArrayList arr = new ArrayList() {
//new Person(){ Name="Alice Wang", Age=19},
//new Person(){ Name="Wayen Li", Age=12},
//new Person(){ Name="Chris Sun", Age=21},
//new Person(){ Name="Jerry Huang", Age=22}
//}; //Console.WriteLine("排序之前:");
//for (int i = 0; i < arr.Count; i++)
//{
// Console.WriteLine(((Person)arr[i]).Name);
//}
////IComparable
////升序排序
//arr.Sort(); ////反转
////arr.Reverse(); //Console.WriteLine("排序之后:");
//for (int i = 0; i < arr.Count; i++)
//{
// Console.WriteLine(((Person)arr[i]).Name);
//}
//Console.ReadKey(); #endregion #region 通过编写不同的比较器,实现ArrayList的Sort()方法的不同方式排序 ArrayList arr = new ArrayList() {
new Person(){ Name="Alice Wang", Age=},
new Person(){ Name="Wayen Li", Age=},
new Person(){ Name="Chris Sun", Age=},
new Person(){ Name="Jerry Huang", Age=}
};
arr.Sort(); //按照年龄升序排序
arr.Sort(new PersonSortByAgeAsc()); //按照年龄降序排序
//arr.Sort(new PersonSortByAgeDesc()); //按照姓名的长度升序排序
//arr.Sort(new PersonSortByNameLengthAsc()); //按照姓名长度降序排序
//arr.Sort(new PersonSortByNameLengthDesc());
for (int i = ; i < arr.Count; i++)
{
Console.WriteLine(((Person)arr[i]).Name.ToString()+","+((Person)arr[i]).Age.ToString());
}
Console.ReadKey(); #endregion
}
} /// <summary>
/// 这个类就是一个比较器,这个比较器是一个按年龄进行升序排序的比较器
/// </summary>
class PersonSortByAgeAsc : IComparer
{ #region IComparer 成员 public int Compare(object x, object y)
{
Person p1 = x as Person;
Person p2 = y as Person;
if (p1 != null && p2 != null)
{
return p1.Age - p2.Age;
}
else
{
throw new ArgumentException();
}
} #endregion
} /// <summary>
/// 按照年龄降序排序的比较器
/// </summary>
class PersonSortByAgeDesc : IComparer
{ #region IComparer 成员 public int Compare(object x, object y)
{
Person p1 = x as Person;
Person p2 = y as Person;
if (p1 != null && p2 != null)
{
return p2.Age - p1.Age;
}
else
{
throw new ArgumentException();
}
} #endregion
}
//
class Person : IComparable
{
public string Name { get; set; } public int Age { get; set; } public int CompareTo(object obj)
{
Person p = obj as Person;
if (p == null)
{
throw new ArgumentException();
}
else
{
return this.Age-p.Age;
}
}
}
}
注:使用时,如非必要强烈建议使用list而不是arraylist 程序内省去了类型转换过程,效率高
ArrayList 排序Sort()方法扩展的更多相关文章
- Excel VBA解读(54):排序——Sort方法
Excel VBA解读(54):排序——Sort方法 看看下面的Excel界面截图,“排序”和“筛选”往往在一起,这大概是很多数据需要先排序后筛选吧 首先以“性别”作为排序字段,升序排列,并且第一行 ...
- 定制对ArrayList的sort方法的自定义排序
java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将Arr ...
- ArrayList排序Sort()方法(转)
//使用Sort方法,可以对集合中的元素进行排序.Sort有三种重载方法,声明代码如下所//示. public void Sort(); //使用集合元素的比较方式进行排序 public void S ...
- Javascript数组系列四之数组的转换与排序Sort方法
今天我们继续来介绍 Javascirpt 数组中的方法,也是数组系列的第四篇文章,因为数组的方法众多,每篇文章我们都对数组的每个方法都有比较细致的描述,只要你能够从中成长一点点,那我们的目的就达到了, ...
- 如何实现对ArrayList排序 sort()
package com.collection; import java.util.ArrayList;import java.util.Collections;import java.util.Com ...
- 使用 Collections 实现排序 sort方法 对List 实体类实现Comparable类 示例
package com.test.jj; import java.util.ArrayList; import java.util.Collections; public class Test { A ...
- js sort方法根据数组中对象的某一个属性值进行排序(实用方法)
js sort方法根据数组中对象的某一个属性值进行排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {nam ...
- 【JavaScript排序】 sort()方法(解决null、undefined、0之间的排序(混乱)问题)
JavaScript排序 - sort()方法 --解决null.undefined.0之间的排序(混乱)问题 一.普通的数组排序 JavaScript中用方法sort()为数组排序.sort() ...
- JAVA中ArrayList重写比较方法
ArrayList的sort方法重写: 当ArrayList中存放的为含有多个成员变量的数据类型时,在进行sort排序时要重写比较方法,一般都写在这个数据类型类的内部如: package 算法竞赛入门 ...
随机推荐
- 51Nod 1021 石子合并 Label:Water DP
N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价. 例如: 1 2 3 4,有 ...
- 【BZOJ】3670: [Noi2014]动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 题意:太水了= = #include <bits/stdc++.h> using ...
- iOS 网络框架编写总结
一,常用 1> 不错的处理接收到的网络图片数据的方法 id img= ISNSNULL(pic)?nil:[pic valueForKey:@"img"]; NSString ...
- Android在智能终端领域的关键技术专题讲座(成都站)
Android系统引领了终端智能化的浪潮,在民用.公 共及工业等诸多领域得到了广泛的应用,涉及手持终端.电视.汽车导航.工业控制等,在云计算.设备智能化等方面表现卓越.Android也凭借着自身的优 ...
- UpdatePanel完成后调用js
引言: asp.net 微软引入了UpdatePanel 使用起来很方便 如果 我们想UpdatePanel加载完成后做一些事情 需要使用js <script type="text/j ...
- C#中如何在字符串中设置上标
一.HTML中:如字符串"21st" 想要把st 设置为上标,在html标签中是21<sup>st</sup> 二.C#编辑器中你可以使用 unicode ...
- Thymeleaf学习内容
Thymeleaf Page Layouts Spring MVC and Thymeleaf: how to access data from templates thymeleaf-layout- ...
- 关于Autoit上传文件的问题
Autoit上传文件需要安装两个软件: 使用这个做文件上传时:在代码中需要添加的代码如下: Runtime.getRuntime().exec("d:/zhpg.exe"); D盘 ...
- webdriver中定位元素,报无法找到元素的问题
webdriver中定位元素,报无法找到元素的问题时,需要查看以下几点: 1 用火狐的firebug插件定位元素,确保这个元素的定位正确: 2 在火狐的firebug插件的,在html页签中输入fra ...
- Trie字典树 静态内存
静态字典树 看了好久的字典树,挺简单的一个结构,愣是看了这么久才写出来... 专心一点就不会这样了.... 接下来就去刷刷字典树的题吧....... 下面是字典树.... 定义节点 typedef s ...