C# ArrList集合排序
作者:秋名
撰写时间:2020 年05 月27日
技术点:ArrList集合排序的两种方法,一种是Sort(),一种是自定义方法。继承接口IComparable/IComparer实现。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ArrayList集合
{
class Program
{
static void Main(string[] args)
{
#region ArrayLiast排序方法
//数字排序
ArrayList arr = new ArrayList(new int[] { 1,2,98,78,56,26,5,8});
//默认升序
arr.Sort();
//没有降序,但是微软提供顺序反转
arr.Reverse();
for (int i = 0; i < arr.Count; i++)
{
Console.WriteLine(arr[i]);
}
Console.WriteLine("============================分界线=============================");
//字符串排序
ArrayList arr1 = new ArrayList(new string[] { "h1", "xdd", "awe", "frg", "rew", "qscv", "uyt" });
arr1.Sort();
for (int i = 0; i < arr1.Count; i++)
{
Console.WriteLine(arr1[i]);
}
Console.WriteLine("============================分界线=============================");
//接口排序
ArrayList array = new ArrayList();
Person p1 = new Person();
p1.Name="qmt";
p1.Age=22;
p1.Email="1385@qq.com";
Person p2 = new Person();
p2.Name = "wer";
p2.Age = 21;
p2.Email = "1385@qq.com";
Person p3 = new Person();
p3.Name = "xcv";
p3.Age = 20;
p3.Email = "1385@qq.com";
Person p4 = new Person();
p4.Name = "ghj";
p4.Age = 28;
p4.Email = "1385@qq.com";
array.Add(p1);
array.Add(p2);
array.Add(p3);
array.Add(p4);
array.Sort();//进行排序需要继承接口
Console.WriteLine(array.Count);
for (int i = 0; i < array.Count; i++)
{
Console.WriteLine(((Person)array[i]).Name);
}
Console.WriteLine("============================分界线=============================");
//使用接口IComparer进行比较
ArrayList array = new ArrayList();
Person p1 = new Person();
p1.Name="qmtzcd";
p1.Age=22;
p1.Email="1385@qq.com";
Person p2 = new Person();
p2.Name = "werhellowe";
p2.Age = 21;
p2.Email = "1385@qq.com";
Person p3 = new Person();
p3.Name = "xcvsd";
p3.Age = 20;
p3.Email = "1385@qq.com";
Person p4 = new Person();
p4.Name = "ghj";
p4.Age = 28;
p4.Email = "1385@qq.com";
array.Add(p1);
array.Add(p2);
array.Add(p3);
array.Add(p4);
//直接调用Sort()方法是使用Person类型实现了IComParble接口的默认方式来排序
// array.Sort();
array.Sort(new PersonSortByNameLengthAsc());
Console.WriteLine(array.Count);
for (int i = 0; i < array.Count; i++)
{
Console.WriteLine(((Person)array[i]).Name);
}
#endregion
Console.ReadKey();
}
}
//继承接口 IComparable
public class Person:IComparable
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
//实现接口
public int CompareTo(object obj)
{
Person p = obj as Person;
if (p != null)
{
return this.Age - p.Age;
}
return 0;
}
}
//继承接口IComparer,比较两个对象的方法
public class PersonSortByNameLengthAsc : IComparer
{
public int Compare(object x, object y)
{
Person p1 = x as Person;
Person p2 = y as Person;
return p1.Name.Length - p2.Name.Length;
}
}
}