常用的两种使用scort()进行排序的方法
对于List按照某一个字段的值进行排序,使用系统提供的sort方法进行排序,需要继承ICompare接口实现参数中的CompareTo方法,注意参数一定是Object。CompareTo方法只能进行两个数据的比较,但是系统可以实现对整个list中的数据的排序。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
List<Student> stuList = new List<Student>();
stuList.Add(s1);
stuList.Add(s2);
stuList.Add(s3);
stuList.Add(s4);
stuList.Add(s5);
stuList.Add(s6);
for (int i = 0; i < stuList.Count; i++)
{
Console.WriteLine(stuList[i]);
}
Console.WriteLine("------------------------");
stuList.Sort();
for (int i = 0; i < stuList.Count; i++)
{
Console.WriteLine(stuList[i]);
}
public int CompareTo(object other)
{
return this.Age - ((Student)other).Age;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ps:可以通过改变this.Age和other.Age的顺序控制是升序还是降序,方法的返回值必须和接口中的方法保持一致
参考多个字段进行排序
自己实现方法,方法的返回值必须是int,在sort中使用lambda表达式实现排序
可以通过设置权重来控制字段的优先级
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
List<Student> stuList = new List<Student>();
stuList.Add(s1);
stuList.Add(s2);
stuList.Add(s3);
stuList.Add(s4);
stuList.Add(s5);
多个方法之间要使用 + 号
stuList.Sort(((x, y) => x.sortByAge(y) * 4 + x.sortByChinese(y)));//系统规定必须是int
for (int i = 0; i < stuList.Count; i++)
{
Console.WriteLine(stuList[i]);
}
public int sortByAge(Student s)
{
int result = this.Age - s.Age;
return result==0?0:(result>0?1:-1);
}
public int sortByChinese(Student s)
{
int result= (int)(s.Chinese-this.Chinese);//变量的位置确定了正序还是倒序
return result == 0 ? 0 : (result > 0 ? 1 : -1);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---------------------
作者:高冷技术宅
来源:CSDN
原文:https://blog.csdn.net/qq_38280936/article/details/77776495?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
下面附上自己写的:自定义的数据类TreeViewData
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/// <summary>
/// 树形菜单数据
/// </summary>
public class TreeViewData
{
/// <summary>
/// 数据内容
/// </summary>
public string Name;
/// <summary>
/// 数据所属的父ID
/// </summary>
public int ParentID;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void Awake()
{
List<TreeViewData> datas = new List<TreeViewData>();
TreeViewData data = new TreeViewData();
for (int i = 0; i < length; i++)//多次填充,依据parentID(主)和Name(次)排序
{
data = new TreeViewData();
data.Name = "1.1.1.2.1.第一题";
data.ParentID = 8;
datas.Add(data);
}
datas.Sort((x, y) => sortByTreeViewDataParentID(x,y)*4+sorByTreeViewDataName(x,y));//系统规定必须是int
}
public int sortByTreeViewDataParentID(TreeViewData x,TreeViewData y)
{
int result = x.ParentID - y.ParentID;
return result == 0 ? 0 : (result > 0 ? 1 : -1);
}
public int sorByTreeViewDataName(TreeViewData x, TreeViewData y) {
CultureInfo PronoCi = new CultureInfo(2052);
int result = string.Compare(y.Name, x.Name, true,PronoCi);
return result == 0 ? 0 : (result>0?1:-1);
}
以上可以起到对List排序效果;
上述的lamda表达式还可以修改成如下:(默认是汉字拼音的读音顺序)
CultureInfo PronoCi = new CultureInfo(2052);
datas.Sort((x, y) =>
{
int result;
if (x.building_name == y.building_name)
{
result = 0;
}
else
{
if (string.Compare(x.building_name, y.building_name, true, PronoCi) > 0)
{
result = 1;
}
else
{
result = -1;
}
}
return result;
});