gpt4 book ai didi

c# - 按列表中的属性分组,并在不影响原始分组的情况下按另一个属性对这些分组元素进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:32 26 4
gpt4 key购买 nike

你好,我有一个体育比赛列表,我想按比赛分组,然后按开始时间排序,而不影响 c# 中的比赛分组(也就是按比赛分组,然后按开始日期排序):

基本上我需要的是:

Match            Start Time Competition

red vs blue 17:40 league 1
yellow vs green 15:00 league 2
brown vs orange 12:00 league 1
purple vs maroon 20:00 league 3
gold vs silver 16:45 league 1
white vs black 19:00 league 3
grey vs navy 18:00 league 1

转换成这样:

Match         Start Time    Competition

brown vs orange 12:00 league 1
gold vs silver 16:45 league 1
red vs blue 17:40 league 1
grey vs navy 18:00 league 1
yellow vs green 15:00 league 2
white vs black 19:00 league 3
purple vs maroon 20:00 league 3

我目前的代码无法正常工作,我有点不知下一步该去哪里。任何想法将不胜感激。这是下面的代码:

  var matchListSorted =
list1.GroupBy(rows=> rows.Competition)
.SelectMany(row=> row.OrderBy(rows=> rows.ExpectedOffDate))
.ToList();

编辑此代码当前按比赛分组,但随后忽略它以支持按开始时间排序,如下所示

Match            Start Time   Competition
brown vs orange 12:00 league 1
yellow vs green 15:00 league 2
gold vs silver 16:45 league 1
red vs blue 17:40 league 1
grey vs navy 18:00 league 1
white vs black 19:00 league 3
purple vs maroon 20:00 league 3

最佳答案

不确定我的回答是否会被认为是题外话,但我能够在不使用分组的情况下仅使用 order by 来实现结果。

[TestClass]
public class LinqTests {

[TestMethod]
public void Linq_Sort() {
var input = new[]
{
new {Match="red vs blue",StartTime="17:40",Competition="league 1"},
new {Match="yellow vs green",StartTime="15:00",Competition="league 2"},
new {Match="brown vs orange",StartTime="12:00",Competition="league 1"},
new {Match="purple vs maroon",StartTime="20:00",Competition="league 3"},
new {Match="gold vs silver",StartTime="16:45",Competition="league 1"},
new {Match="white vs black",StartTime="19:00",Competition="league 3"},
new {Match="grey vs navy",StartTime="18:00",Competition="league 1"},
};

var matchListSorted = (from match in input
orderby match.Competition, match.StartTime
select match);


var result = matchListSorted.ToList();
}
}

得到如下结果

+       [0] { Match = "brown vs orange", StartTime = "12:00", Competition = "league 1" }    <Anonymous Type>
+ [1] { Match = "gold vs silver", StartTime = "16:45", Competition = "league 1" } <Anonymous Type>
+ [2] { Match = "red vs blue", StartTime = "17:40", Competition = "league 1" } <Anonymous Type>
+ [3] { Match = "grey vs navy", StartTime = "18:00", Competition = "league 1" } <Anonymous Type>
+ [4] { Match = "yellow vs green", StartTime = "15:00", Competition = "league 2" } <Anonymous Type>
+ [5] { Match = "white vs black", StartTime = "19:00", Competition = "league 3" } <Anonymous Type>
+ [6] { Match = "purple vs maroon", StartTime = "20:00", Competition = "league 3" } <Anonymous Type>

然后这样试了,结果一样

[TestMethod]
public void Linq_GroupSort() {
var input = new[]
{
new {Match="red vs blue",StartTime="17:40",Competition="league 1"},
new {Match="yellow vs green",StartTime="15:00",Competition="league 2"},
new {Match="brown vs orange",StartTime="12:00",Competition="league 1"},
new {Match="purple vs maroon",StartTime="20:00",Competition="league 3"},
new {Match="gold vs silver",StartTime="16:45",Competition="league 1"},
new {Match="white vs black",StartTime="19:00",Competition="league 3"},
new {Match="grey vs navy",StartTime="18:00",Competition="league 1"},
};

var matchListSorted = (from match in input
orderby match.Competition
group match by match.Competition into g
select g).SelectMany(g => g.OrderBy(m => m.StartTime));


var result = matchListSorted.ToList();
}

关于c# - 按列表中的属性分组,并在不影响原始分组的情况下按另一个属性对这些分组元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727935/

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