自定义排序(三个领域的IComparer)

Hou*_*man 18 .net c# comparison

我有一个人类,有三个字段,标题,名称,性别,我想为它创建一个自定义排序,首先按标题排序,然后按名称排序,然后按性别升序排序:

public class SortPerson : IComparer
    {
        public int Compare(object x, object y)
        {
            (…)
        }
    }
Run Code Online (Sandbox Code Playgroud)

我知道如何只针对一个变量进行比较:但我如何才能继续进行三次?

public class SortPerson : IComparer
        {

int IComparer.Compare(object a, object b)
   {
      Person p1=(Person)a;
      Person p2=(Person)b;
      if (p1.Title > p2.Title)
         return 1;
      if (p1.Title < p2.Title)
         return -1;
      else
         return 0;
   }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢,

Ita*_*aro 42

//Assuming all the fields implement IComparable
int result = a.field1.CompareTo(b.field1);
if (result == 0)
  result = a.field2.CompareTo(b.field2);
if (result == 0)
  result = a.field3.CompareTo(b.field3);
return result;
Run Code Online (Sandbox Code Playgroud)


Evr*_*glu 6

我不知道你对比较器有什么用处,但也许你可以使用"order by"LINQ语句来代替比较器,它允许按各种字段排序:

var orderedListPersons =
    from p in listPersons
    orderby p.Title, p.Name, p.Gender
    select person;
Run Code Online (Sandbox Code Playgroud)

将以您想要的方式订购listPersons.您也可以使用LINQ OrderBy和ThenBy方法使用不同的语法进行相同的操作:

var orderedlistPersons = listPersons.OrderBy(p => p.Title).ThenBy(p => p.Name).ThenBy(p => p.Gender);
Run Code Online (Sandbox Code Playgroud)