Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按整数值对C#中的类数组进行排序?_C#_Arrays - Fatal编程技术网

如何按整数值对C#中的类数组进行排序?

如何按整数值对C#中的类数组进行排序?,c#,arrays,C#,Arrays,我有一个类Player,它有字段name和点。i、 e class Player { string name, int points }. 我有这些对象的数组: Program.playerList = new ArrayList(); 我正在Windows窗体程序中显示这些对象。我想根据一个玩家类拥有的点数(首先是最高点数)按顺序显示它们。如何执行此操作?您有一个ArrayList。 首先,想想你是否真的需要它。 您将在那里存储Player对象,因此,如果它是强类型数组Player[]或L

我有一个类
Player
,它有字段
name
。i、 e

class Player { string name, int points }.
我有这些对象的数组:

Program.playerList = new ArrayList();

我正在Windows窗体程序中显示这些对象。我想根据一个玩家类拥有的点数(首先是最高点数)按顺序显示它们。如何执行此操作?

您有一个
ArrayList
。 首先,想想你是否真的需要它。
您将在那里存储
Player
对象,因此,如果它是强类型数组
Player[]
List
会更好。 但是,如果出于某些原因需要
ArrayList
,则需要实现
IComparer

public class PlayersByPointsComparer : IComparer
{
    private readonly IComparer _baseComparer;

    public int Compare(object x, object y)
    {
        return ((Player)x).Points - ((Player)y).Points;
    }
}

// ...

Program.playerList.Sort(new PlayersByPointsComparer());
但是,如果存在非
Player
类型的对象,则会引发异常。如果不需要,那么您是否需要
ArrayList

如果将in替换为
数组
,则可以使用
Array.Sort
或LINQ
OrderBy
方法

Array.Sort(Program.playerList, (a, b) => (a.points - b.points));
// or
Program.playerList = Program.playerList.OrderBy(x => x.Points).ToArray();
如果您有一个
列表
,您会这样排序

Program.playerList.Sort(new PlayersByPointsComparer());
// or
Program.playerList.Sort((a, b) => (a.Points - b.Points));
// or
Program.OrderBy(a => a.Points).ToList();

请使用泛型集合
类型
,它与
数组列表
相比有一些优势。一个是数组项的类型检查,第二个是使用
Linq
的可能性

那你可以用

Program.playerList = Program.playerList.OrderBy(p => p.points).ToList()
或者(没有Linq)


这可以是您的玩家类:

class Player : IComparable<Player>
{
    public string Name { get; set; }
    public int Points { get; set; }

    public int CompareTo(Player other)
    {
        // Alphabetic sort if points are equal. [A to Z]
        if (this.Points == other.Points)
        {
            return this.Name.CompareTo(other.Name);
        }
        // Default to points sort. [High to low]
        return other.Points.CompareTo(this.Points);
    }
}
class播放器:i可比较
{
公共字符串名称{get;set;}
公共整数点{get;set;}
公共整数比较(其他玩家)
{
//如果点相等,则按字母排序。[A到Z]
if(this.Points==其他.Points)
{
返回此.Name.CompareTo(其他.Name);
}
//默认为点排序。[从高到低]
返回其他.Points.CompareTo(此.Points);
}
}
为了测试它:

        List<Player> list = new List<Player>();
        list.Add(new Player() { Name = "Player1", Points = 50 });
        list.Add(new Player() { Name = "Player2", Points = 60 });
        list.Add(new Player() { Name = "Player3", Points = 30 });
        list.Add(new Player() { Name = "Player4", Points = 80 });
        list.Add(new Player() { Name = "Player5", Points = 70 });

        list.Sort();

        foreach (var element in list)
        {
            Console.WriteLine(element.Name);
        }
List List=新列表();
添加(新玩家(){Name=“Player1”,点数=50});
添加(新玩家(){Name=“Player2”,点数=60});
添加(新玩家(){Name=“Player3”,点数=30});
添加(新玩家(){Name=“Player4”,点数=80});
添加(新玩家(){Name=“Player5”,点数=70});
list.Sort();
foreach(列表中的var元素)
{
Console.WriteLine(element.Name);
}
结果如下:


欢迎来到SO。你的问题可以理解为一系列的要求。有代码显示吗?你做了什么研究?这些东西将帮助我们帮助你。祝你好运谢谢你,你的权利,我真的不需要ArrayList。我对编程很陌生,所以还在学习。谢谢你的帮助
        List<Player> list = new List<Player>();
        list.Add(new Player() { Name = "Player1", Points = 50 });
        list.Add(new Player() { Name = "Player2", Points = 60 });
        list.Add(new Player() { Name = "Player3", Points = 30 });
        list.Add(new Player() { Name = "Player4", Points = 80 });
        list.Add(new Player() { Name = "Player5", Points = 70 });

        list.Sort();

        foreach (var element in list)
        {
            Console.WriteLine(element.Name);
        }