我在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<ResultsList>();
然后接下来按Set排序,接着按图1排序,然后按图2排序,所以我得到follownig list(例子):
PlayerID Set Figure1 Figure2 0 2 2 1 1 2 2 1 3 1 1 0
这意味着玩家&#34; 0&#34;和&#34; 1&#34;有相同的集合和数字,我想把它们都放在新的列表中
List<int> Winers= new List<int>();
但在以下情况中,&#34; 0&#34;是唯一的赢家:
PlayerID Set Figure1 Figure2 0 2 3 1 1 2 2 1 3 1 1 0
所以我想只把那个ID放到结果中 我该怎么做?
答案 0 :(得分:0)
在订购Results
后,您可以使用First
获取获胜者,然后使用TakeWhile
使其全部等于它:
var winner = Results.First()
var winners = Results.TakeWhile(r => r.Set == winner.Set && r.Figure1 == winner.Figure1 && winner.Figure2 == r.Figure2).ToList();
答案 1 :(得分:0)
您可以使用GroupBy
:
List<ResultsList> winners =
results.GroupBy(r => new {Set = r.Set, Figure1 = r.Figure1, Figure2 = r.Figure2}).
OrderBy(g => g.Key.Set).
ThenBy(g => g.Key.Figure1).
ThenBy(g => g.Key.Figure2).
First().ToList();
如果已经订购results
,您可以省略OrderBy
和ThenBy
条款。
答案 2 :(得分:0)
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));