如何按整数值对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
或LINQOrderBy
方法
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);
}