C# 按多种不同条件对数组进行排序

C# Sort Array by multiple different conditions

我得到了一个包含对象项的数组 'Person'

我需要将特殊人员放在最上面(按 ID 排序的)和下面的非特殊人员(按字母顺序排序的)。它应该是这样的:

有没有一种方法可以像这样排序,而不必拆分列表,单独排序,然后将其合并回一起?

首先你可以OrderBy通过Special(注意false < true)然后你可以在ThenBy中使用条件像这样:

var result = persons
  .OrderBy(person => person.Special != "Yes")
  .ThenBy(person => person.Special == "Yes" ? person.Id : 0)
  .ThenBy(person => person.Special == "Yes" ? "" : person.Name);

一个non-linq版本:

list.Sort((a, b) =>
{
    if (a.Special != b.Special)
    {
        return a.Special ? -1 : 1;
    }

    return a.Name.CompareTo(b.Name);
});