我有一个名为memberData的数组列表,它存储了memberID,memberName,memberPoint和一些其他成员数据。我想根据memberPoint字段对所有成员进行排序。
这是我的代码:
public void displayAllMembers()
{
int index = 1;
Console.WriteLine("ALL MEMBERS");
Console.WriteLine("No\t Member Name\t\t Member ID\t Member Point");
memberData.Sort();
foreach (object data in memberData)
{
tempMember = (Member)data;
Console.WriteLine("{0}\t\t {1} {2}\t\t {3}\t\t {4}", index, tempMember.givenName, tempMember.surName, tempMember.memberID, tempMember.memberPoint);
index++;
}
}
答案 0 :(得分:1)
而不是Sort()
仅使用内部Equals
来比较列表中的对象,而只需使用LINQ:
var sortedByMemberPoint = memberData.OrderBy(m=>m.memberPoint);
这将按OrderBy
方法中提供的属性对您的成员数据进行排序。要对降序进行排序,请改为使用OrderByDescending()
。
或者,您可以实现自己的比较器类来比较成员数据(这对于您的简单用例来说是一个相当大的开销)。如果您想进行更复杂的比较,建议使用此方法。您可以查看MSDN上的简单样本。
答案 1 :(得分:1)
您必须使用LINQ函数进行排序,具体取决于这样的排序方向: 按升序排序:
memberData = memberData.OrderBy(m=>m.memberPoint);
按降序排序:
memberData = memberData.OrderByDescending(m=>m.memberPoint);
答案 2 :(得分:0)
请尝试以下操作:
public class MemberData : IComparable<MemberData>
{
public static List<MemberData> memberData = new List<MemberData>();
public string givenName {get;set;}
public string surName {get;set;}
public string memberID { get;set;}
public string memberPoint { get; set; }
public void displayAllMembers()
{
int index = 1;
Console.WriteLine("ALL MEMBERS");
Console.WriteLine("No\t Member Name\t\t Member ID\t Member Point");
memberData.Sort();
foreach (MemberData data in memberData)
{
Console.WriteLine("{0}\t\t {1} {2}\t\t {3}\t\t {4}", index, data.givenName, data.surName, data.memberID, data.memberPoint);
index++;
}
}
public int CompareTo(MemberData other)
{
if (this.givenName != other.givenName) return this.givenName.CompareTo(other.givenName);
if (this.surName != other.surName) return this.surName.CompareTo(other.surName);
if (this.memberID != other.memberID) return this.memberID.CompareTo(other.memberID);
return this.memberPoint.CompareTo(other.memberPoint);
}
}
答案 3 :(得分:0)
正如@derape所说,你也可以使用 IComparer ,这里你也可以使用这种方法的例子
void Main()
{
A[] a = new A[]
{
new A
{
Point = 10,
Name="A1"
},
new A
{
Point=6,
Name="A2"
},
new A
{
Point=7,
Name="A3"
}
};
Array.Sort(a, new AComparer());
//at this point a has all element sorted
}
public class A
{
public int Point { get; set; }
public string Name { get; set;}
}
public class AComparer : IComparer<A>
{
public int Compare(A x, A y)
{
if(x.Point == y.Point)
return 0;
if(x.Point < y.Point)
return -1;
else return 1;
}
}
希望这有帮助