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);
});
我得到了一个包含对象项的数组 '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);
});