gpt4 book ai didi

c# - 按出现次数最少的次数排序列表

转载 作者:行者123 更新时间:2023-11-30 23:19:45 25 4
gpt4 key购买 nike

我已经研究这个问题很长时间了,但无法弄清楚或找不到关于它的现有问题。我正在编写一个用于比赛计分的 C# 工具,我需要在其中得出总体结果。对于这个结果,一些特殊规则适用,我无法找出最好的方法:

我有一个包含比赛结果的列表(获胜者获得 0 分,第二名获得 2 分,第三名获得 3 分等等)。为了使结果有效,我们首先按所有点的总和排序。完成后,车手仍有可能分享相同数量的积分。在那种情况下,我们必须查看他们的最佳结果,例如:

车手 1 得分:0 + 0 + 4 = 4车手 2 得分:2 + 2 + 0 = 4

在这种情况下,车手 1 将排在第一位,因为他获得的胜利最多,而车手 2 将紧随其后,因为他只有一次胜利。这应该适用于所有参与者。

更新:我的数据模型如下所示:

    public class SerieResultForPilot {
public long Position { get; set; }
public Pilot Pilot { get; set; }
public List<SerieResultEntry> SerieResultEntries { get; set; }
public long Total { get; set; }
}

public class SerieResultEntry {
public long Points { get; set; }
public long Penalties { get; set; }
}

我目前的排序方式不正确:

       var orderedList = serieResultList.OrderBy(rfp => rfp.Total);
for (int i = 0; i < pilots.Count; i++) {
orderedList = orderedList.ThenBy(c => c.SerieResultEntries.Count(sre => sre.Points == i));
}

我希望任何人都可以帮助我解决这个问题,因为我在这里找不到这样的问题。

提前致谢,标记

解决方案比较功能

    public class SerieResultForPilot {
public long Position { get; set; }
public Pilot Pilot { get; set; }
public List<SerieResultEntry> SerieResultEntries { get; set; }
public long Total { get; set; }

public long CompareTo(SerieResultForPilot other) {
var result = this.Total - other.Total;
if (result != 0) {
return result;
}
var thisResults = this.SerieResultEntries.OrderBy(x => x.Points).Select(x => x.Points).ToArray();
var otherResults = other.SerieResultEntries.OrderBy(x => x.Points).Select(x => x.Points).ToArray();
for (var i = 0; i < thisResults.Length; i++) {
if (thisResults[i] != otherResults[i]) {
return thisResults[i] - otherResults[i];
}
}
return 0;
}
}

public class SerieResultEntry {
public long Points { get; set; }
public long Penalties { get; set; }
}

订购

    var orderedList = serieResultList.OrderBy(rfp => rfp.Total);
foreach (var result in serieResultList) {
orderedList = orderedList.ThenBy(c => c.CompareTo(result));
}

最佳答案

您可以在围绕结果构建的类中实现IComparable 接口(interface)。

根据你的数据模型,compairing 方法可能看起来像这样

public int CompareTo(SerieResultForPilot other){
var result this.Total - other.Total;
if (result != 0){
return result;
}else{
var thisResults = this.SerieResultEntries.OrderBy(x => x.SerieResultEntries.Points).toArray();
var otherResults = his.SerieResultEntries.OrderBy(x => x.SerieResultEntries.Points).toArray();
for (var i=0; i< thisResults.Count; i++){
if (thisResults[i] != otherResults[i]){
return thisResults[i] - otherResults[i];
}
}
return 0;
}
}

IComparable 接口(interface)的文档可在此处获得 https://msdn.microsoft.com/pl-pl/library/system.icomparable(v=vs.110).aspx

关于c# - 按出现次数最少的次数排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40101572/

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