如何通过类中的属性来排序类列表

时间:2016-03-10 04:23:45

标签: c# list sorting properties

我希望能够通过标有List<Player>的{​​{1}}类中的整数对以下Player进行排序。我希望最高rating成为我的类列表中的第一个索引,很多整数都是重复的!

启动清单。

rating

这是我存储List of。

的类
    public List<PriceCheckerParameters> _PriceCheckerList;
    public List<PriceCheckPlayerList> _PlayerList;
    private List<Player> _Players;

这是我对列表进行排序并将其分配给另一个不相关类的另一个列表的函数。

public class Player
{

    public enum RatingRank
    {
        Bronze,
        Silver,
        Gold,
    } 
    public int id { get; set; }

    public int nationId { get; set; }

    public int rating { get; set; }

    public RatingRank ratingLevel { get; set; }

    public string firstName { get; set; }

    public string lastName { get; set; }
}

我试过阅读寻找其他答案,但我无法绕过OrderBy或Sort函数。

编辑:我看到了你的答案,但有人可以解释一下它是如何运作的吗?

4 个答案:

答案 0 :(得分:1)

使用OrderBy Linq扩展,这在底部保持最高排名。

_Players = _Players.OrderBy(p=>p.rating).ToList();

答案 1 :(得分:1)

正如之前的所有答案所述,您可以使用List类中可用的扩展方法。它们是正确的,并且会导致编写更少的代码,以及我的首选方式,但由于没有人提到或向您展示如何在LINQ中执行此操作,我将把它放在这里。

List<Player> _PlayerList = new List<Player>()
{
    new Player() { firstName = "TestName1", lastName = "TestSurname1", rating = 1 },
    new Player() { firstName = "TestName2", lastName = "TestSurname2", rating = 2 },
    new Player() { firstName = "TestName3", lastName = "TestSurname3", rating = 3 },
    new Player() { firstName = "TestName4", lastName = "TestSurname4", rating = 4 }
};

var sortedPlayers = from p in _PlayerList
                    orderby p.rating descending
                    select p;

foreach (var player in sortedPlayers)
{
    Console.WriteLine(player.firstName);
}

在这里,我首先使用一些虚拟数据初始化您的列表。如您所见,然后我使用LINQ查询您的播放器列表,并按降序排列结果。

这是产生的结果。 enter image description here

如果您想在列表中切换结果,只需将LINQ查询中的'descending'关键字更改为'ascending',即不同类型的排序。以下是相反结果的示例。

var sortedPlayers = from p in _PlayerList
                    orderby p.rating ascending
                    select p;

这将是结果。

enter image description here

Here是一个让你开始使用LINQ的好地方。

答案 2 :(得分:0)

这个怎么样?

_Players = _Players.OrderByDescending(player => player.rating).ToList();

答案 3 :(得分:0)

在我之前的其他答案是正确的。我更喜欢这种方式,因为它使用了一个List构造函数而不是调用.ToList():

//Ascending for first item in list to have the smallest rating value
List<Player> newList = new List<Player>(originalList.OrderByAscending(each => each.rating));