gpt4 book ai didi

c# - 将 LINQ 'GroupBy' 运算符(operator)键排序为自定义顺序

转载 作者:行者123 更新时间:2023-12-02 09:57:54 25 4
gpt4 key购买 nike

在 C# 中,当使用 LINQ 运算符“GroupBy”时,我想将键按指定的自定义顺序进行排序。

我的场景是基于足球的,我想将球员分类到他们的预定义位置(在 CMS 中创建和设置)。球员可以分配的位置如下,并且只能分为一个

  • 守门员
  • 后卫
  • 中场
  • 前锋

Player.cs(略读)

    public string Name {get; set;}
public string ImgUrl {get; set;}
public string Position {get; set;}

PlayersLandingPageViewModel.cs(略读)

    public IEnumerable<IGrouping<string, TeamPlayerPage>> GroupedPlayersList { get; set; }

PlayersLandingPageController(略读)

    var groupedPlayersList = teamPlayersLandingPage.Children<TeamPlayerPage>().GroupBy(x => x.Position);

var playersLandingPageViewModel = new PlayersLandingPageViewModel(model.Content)
{
GroupedPlayersList = groupedPlayersList
};

上面返回 IEnumerable<IGrouping<string, TeamPlayerPage>>但按键按以下顺序排列(假设默认情况下按字母顺序排列?)。在 View 中,我只是迭代 Model.GroupedPlayersList 中的每个组(键),然后迭代组内的所有玩家。 foreach 中的 foreach(这按预期工作)

  • 后卫
  • 守门员
  • 中场
  • 前锋

在寻找解决方案时,以下帖子 ( how can i create a programmatically sort order in C# on a grouped collection ) 建议使用 IComparer<String>但由于缺乏理解,我有点不确定如何将其应用到我的场景中。是在 GroupBy 操作之前、同时还是之后?

List<string> playerGroupsSortOrder = new List<string>() { "goalkeeper", "defender", "midfielder", "striker"};

有谁可以推荐一下吗?帮助我理解任何可行解决方案的解释或链接将非常有帮助。

其他引用资料

谢谢

最佳答案

如果我理解正确,您可以尝试映射:排序时,您可以计算每个Key所需的顺序(例如,0、1、2、3) > (“前锋”、“后卫”等)即将 Key 映射到所需的顺序。

  List<string> playerGroupsSortOrder = new List<string>() { 
"goalkeeper", "defender", "midfielder", "striker"
};

...

var groupedPlayersList = teamPlayersLandingPage
.Children<TeamPlayerPage>()
.GroupBy(x => x.Position)
.OrderBy(group => playerGroupsSortOrder.IndexOf(group.Key));

关于c# - 将 LINQ 'GroupBy' 运算符(operator)键排序为自定义顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61359631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com