基于多个因素对列表进行排序

4

以下是给定的类:

public class Room
{
    public List<Person> People {get;set;}
    public string RoomType {get;set;}
}

public class Person
{
    public bool IsLead{get;set;}
}

给定一个包含人员列表的房间列表,如何对它们进行排序以使:
  • 有领导者的房间排在有序列表的第一位。
  • 同类型的所有房间紧随其后。

请注意,只有一个人是领导者。

示例数据:

  • 双人间非领导者
  • 单人间非领导者
  • 单人间领导者
  • 双人间非领导者

排序后:

  • 单人间领导者
  • 单人间非领导者
  • 双人间非领导者
  • 双人间非领导者
1个回答

4
这里是一个简单而高效的方法:
var orderedRooms = rooms
    .OrderBy(room => !room.People.Any(person => person.IsLead)) // room with lead will be first
    .GroupBy(room => room.RoomType) // RoomType with lead will be first
    .SelectMany(group => group); // flatten the list of groups into one list

此查询符合以下要求:

  • 有序列表中的第一个房间是线索所在的房间。
  • 相同类型的所有房间都会依次排列。

但是,它不会按字母顺序对房间类型进行排序。


这很好。我不需要按字母顺序对房间进行排序。 - CeejeeB
@GrantWinney的方法允许将领导者房间作为变量进行进一步使用,这可能会证明是实用的。在我看来,这也是一个有用的答案。但除此之外,这个更漂亮。 :) - Crono

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接