【问题标题】:C# .net Sort Generica list on multiple values using CompareToC# .net 使用 CompareTo 对多个值的泛型列表进行排序
【发布时间】:2017-10-21 21:03:20
【问题描述】:

我想我已经接近了这一点,但不确定如何/从 CompareTo 方法返回什么。

我的班级有以下 3 个我想要排序的属性(其中的最高值为 3) 公开课成绩{ 积分1 积分2 积分 3 }

List<Scores> scores = new List<Scores>();
scores.Add(new Score{ Score1 = 50, Score2 = 40, Score3 = 30});
scores.Add(new Score{ Score1 = 30, Score2 = 60, Score3 = 50});
scores.Add(new Score{ Score1 = 20, Score2 = 90, Score3 = 100});

我正在寻找的是将第 3 行排在第一位,因为 100 是任何行中的最高数。第 2 行将排在第二位,因为 60 是其余 2 行中的下一个最高值。然后是第 1 行。

不确定要返回什么?

    virtual public int CompareTo(object obj)
    {
        if (obj is BaseAttack)
        {
            var compareObj = (BaseAttack)obj;
            if (compareObj.Score1 > compareObj.Score2 && compareObj.Score1 > compareObj.Score3)
            {
               return this.a.CompareTo(compareObj.a);
            }
            else if (compareObj.Score2 > compareObj.Score1 && compareObj.Score2 > compareObj.Score3)
            {
                return this.a.CompareTo(compareObj.Score2);
            }
            else
            {
                return compareObj.Score3;
            }
        }
        else
        {
            throw new ArgumentException("Object is not a MyObject ");
        }
    }

【问题讨论】:

  • 如果他/她发布了类似上面的代码,您会尝试阅读其他人的问题吗?
  • “哪一个具有最高的三个值” - 请把这个描述得更好一点?
  • 您能否向我们展示六个具有不同值的示例对象,以及比较它们的多种组合的结果(以便我们清楚您的要求)?

标签: c# list sorting generics


【解决方案1】:

CompareTo 返回一个整数 - 对象之间的相对差异。例如,如果您比较 2 个整数,您可以返回 A - B。

在您的情况下,如果 obj > this 则需要返回 1 ,否则返回 -1 。如果对象相等,则返回 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2019-06-09
    相关资源
    最近更新 更多