代码之家  ›  专栏  ›  技术社区  ›  user3896016

使用IComparable进行反向排序

  •  12
  • user3896016  · 技术社区  · 11 年前

    我有这样的代码-

    List<User> users;
    protected class User : IComparable<User>
    {
        public string name;
        public string email;
        public decimal total;
        public string address;
        public string company;
        public string origin;
        public int CompareTo(User b)
        {
            return this.total.CompareTo(b.total);
    
        }
    }
    

    对于按用户点数排序的表。它按升序排序,但需要将其更改为降序。它使用 users.Sort() ,但我似乎想不出如何按照相反的顺序排序。

    4 回复  |  直到 6 年前
        1
  •  16
  •   Selman Genç    11 年前

    如果要反转顺序,只需反转比较即可:

    public int CompareTo(User b)
    {
        return b.total.CompareTo(this.total);
    }
    
        2
  •  6
  •   Sriram Sakthivel    11 年前

    如果您的 User 类可以更改为按相反顺序排序,您可以尝试其他建议修改的答案 CompareTo 方法否则,请尝试以下操作。

    users.Sort();//Sort normally
    users.Sort((x, y) => y.CompareTo(x));//Reverse sort
    
        3
  •  3
  •   DavidG    11 年前

    只需反转比较中的参数。因此,不要:

    return this.total.CompareTo(b.total);
    

    只要做到:

    return b.total.CompareTo(this.total);
    
        4
  •  1
  •   TimChang    6 年前
    public int CompareTo(User b)
    {
        return this.total.CompareTo(b.total) * -1;
    
    }