繁体   English   中英

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

[英]How to order a class list by a property within the classes

我希望能够通过Player类中标记为rating的整数对以下List<Player>进行排序。 我希望rating最高的是我的课程列表中的第一个索引,很多整数将是重复的!

列表的启动。

    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; }
}

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

    public async Task SetPlayerList()
    {
        //returns list of players and stores it to be sorted 
        _Players = await _ItemHandler.GetPlayerList();
        _PlayerList = new List<PriceCheckPlayerList>();

         //This is as much as I am able to get with my knowledge (I'm lacking)
        _Players = _Players.OrderBy()

        foreach (Player eap in _Players)
        {
            _PlayerList.Add(new PriceCheckPlayerList()
            {
                _Player = eap,
                SetYet = false,
                LastUpdated = DateTime.UtcNow, 
            });
        }
    }

我尝试阅读以寻找其他答案,但是无法将我的头围在OrderBy或Sort函数周围。

编辑:我看到了您的答案,但有人可以解释它的工作原理吗?

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

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

如前面所有答案所述,您可以在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查询您的玩家列表,并按降序对结果进行排序。

这就是产生的结果。 在此处输入图片说明

如果要在列表中切换结果,只需将LINQ查询中的'descending'关键字更改为'ascending',即另一种排序方式。 这是相反结果的示例。

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

这将是结果。

在此处输入图片说明

这是让您开始使用LINQ的好地方。

这个怎么样?

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

我面前的其他答案是正确的。 我更喜欢这种方式,因为它使用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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM