如何根据c#中的点排序和显示一个arraylist

时间:2017-07-25 13:35:54

标签: c# sorting arraylist

我有一个名为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++;
        }


    }

4 个答案:

答案 0 :(得分:1)

使用LINQ

而不是Sort()仅使用内部Equals来比较列表中的对象,而只需使用LINQ:

var sortedByMemberPoint = memberData.OrderBy(m=>m.memberPoint);

这将按OrderBy方法中提供的属性对您的成员数据进行排序。要对降序进行排序,请改为使用OrderByDescending()

使用IComparer

或者,您可以实现自己的比较器类来比较成员数据(这对于您的简单用例来说是一个相当大的开销)。如果您想进行更复杂的比较,建议使用此方法。您可以查看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;
    }
}

希望这有帮助