C# 从集合LINQ(C)中的第一个组中选择项目
我用c语言创建纸牌游戏,我有以下类,包含玩家ID、每位玩家的牌集和两张最强大的牌:C# 从集合LINQ(C)中的第一个组中选择项目,c#,linq,C#,Linq,我用c语言创建纸牌游戏,我有以下类,包含玩家ID、每位玩家的牌集和两张最强大的牌: public class ResultsList { public int PlayerID = -1; public int Set = -1; public int Figure1 = -1; public int Figure2 = -1; } 程序创建结果列表: List<ResultsList> Results = new List<ResultsLi
public class ResultsList
{
public int PlayerID = -1;
public int Set = -1;
public int Figure1 = -1;
public int Figure2 = -1;
}
程序创建结果列表:
List<ResultsList> Results = new List<ResultsList>();
接下来按集合、图1和图2对其进行排序,因此我得到以下列表示例:
PlayerID Set Figure1 Figure2
0 2 2 1
1 2 2 1
3 1 1 0
这意味着玩家0和1拥有相同的集合和数字,我想把它们都放在新列表中
List<int> Winers= new List<int>();
但在以下情况下,0是唯一的赢家:
PlayerID Set Figure1 Figure2
0 2 3 1
1 2 2 1
3 1 1 0
所以我只想把这个ID放到结果中。
如何做到这一点?在结果排序后,您可以使用“首先”获得获胜者,然后使用“TakeWhile”获得与之相等的结果:
var winner = Results.First()
var winners = Results.TakeWhile(r => r.Set == winner.Set && r.Figure1 == winner.Figure1 && winner.Figure2 == r.Figure2).ToList();
结果排序后,您可以使用“第一个”获得赢家,然后使用“TakeWhile”获得与之相等的所有结果:
var winner = Results.First()
var winners = Results.TakeWhile(r => r.Set == winner.Set && r.Figure1 == winner.Figure1 && winner.Figure2 == r.Figure2).ToList();
您可以通过GroupBy实现这一点:
如果结果已经排序,您可以使用OrderBy和BEY子句。您可以使用GroupBy实现这一点:
如果结果已经排序,您可以使用OrderBy和THEN by子句。您如何通过提交图1和图2来判断获胜者?您用于将获胜者输入列表的代码在哪里Winers=新列表;欢迎来到btw,可能需要一些时间阅读,这将有助于解决这个问题和未来的问题。作为第一次尝试,还不错。您如何通过提交图1和图2来判断获胜者?您用于将获胜者输入列表的代码在哪里?Winers=new List;欢迎来到btw,可能需要一些时间阅读,这将有助于解决这个问题和未来的问题。不过作为第一次尝试,还不错。嘿,谢谢你们的回复和解决方案。这就是我要找的。嘿,谢谢你们的回复和解决方案。这就是我要找的。
List<ResultsList> items = Results.OrderByDescending(item1 =>
item1.Set).ThenByDescending(item2 => item2.Figure1).ThenByDescending(item3 =>
item3.Figure2).ToList();
ResultsList winner = items[0];
List<int> winners = new List<int>();
winners.Add(winner.PlayerID);
winners.AddRange(items.Where((item, index) =>
index > 0 && item.Set == winner.Set &&
item.Figure1 == winner.Figure1 &&
item.Figure2 == winner.Figure2)
.ToList().Select(item=>item.PlayerID));