【问题标题】:how to sort and display an arraylist based on points in c#如何根据c#中的点对数组列表进行排序和显示
【发布时间】:2017-12-31 11:30:26
【问题描述】:

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


    }

【问题讨论】:

  • 请提供更多代码(例如 memberData 的定义)并更具体地说明您遇到的问题(错误消息、预期与观察到的行为等)。见stackoverflow.com/help/how-to-ask

标签: c# sorting arraylist


【解决方案1】:

您必须根据排序方向使用 LINQ 函数进行排序,如下所示: 按升序排序:

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

降序排序:

memberData = memberData.OrderByDescending(m=>m.memberPoint);

【讨论】:

  • 我尝试输入 OrderBy() 但产生了错误。
【解决方案2】:

使用 LINQ

Sort() 仅使用内部 Equals 来比较列表中的对象,您只需使用 LINQ 即可:

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

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

使用 IComparer

或者,您可以实现自己的比较器类来比较成员数据(这对于您的简单用例来说是相当大的开销)。如果您想进行更复杂的比较,建议您这样做。您可以查看MSDN 以获得简单示例。

【讨论】:

    【解决方案3】:

    尝试以下:

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

    【讨论】:

      【解决方案4】:

      正如@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;
          }
      }
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2015-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        相关资源
        最近更新 更多