如何在c#中对List<T>进行排序




sorting (3)

我有一张 List<Card> ,我想对这些卡片进行排序

所以,我正在寻找一种方法来用不同的标准对它们进行排序,比如它们的 ID ,它们的 Name ......

public class Card : IComparer
{
    public string ID;
    public string Name;
    public int CompareId(object firstCard, object secondCard) 
    {
        Card c1 = (Card)firstCard;
        Card c2 = (Card)secondCard;
        return c1.Id.CompareTo(c2.Id);
    }
}

但是,视觉工作室给我发了一个错误:

'Card' 没有实现接口成员 'IComparer<Card>.Compare(Card, Card)'


展示概念的 好例子
List<T>.Sort(IComparer <T>) 方法请检查链接。

此示例中的 IComparer<T> 比较用于字符串 IComparer<T> 但您也可以将其用于ID(int)。

using System; 
using System.Collections.Generic; 

class GFG : IComparer<string> 
{ 
    public int Compare(string x, string y) 
    { 
        if (x == null || y == null) 
        { 
            return 0; 
        } 

        // "CompareTo()" method 
        return x.CompareTo(y); 

    } 
} 



public class geek 
{ 
    public static void Main() 
    { 
        List<string> list1 = new List<string>(); 

        // list elements 
        list1.Add("C++"); 
        list1.Add("Java"); 
        list1.Add("C"); 
        list1.Add("Python"); 
        list1.Add("HTML"); 
        list1.Add("CSS"); 
        list1.Add("Scala"); 
        list1.Add("Ruby"); 
        list1.Add("Perl"); 

        int range = 4; 

        GFG gg = new GFG(); 

        Console.WriteLine("\nSort a range with comparer:"); 

        // sort the list within a  
        // range of index 1 to 4 
        // where range = 4 
        list1.Sort(1, range, gg); 

        Console.WriteLine("\nBinarySearch and Insert Dart"); 

        // Binary Search and storing  
        // index value to "index" 
        int index = list1.BinarySearch(0, range, 
                                    "Dart", gg); 

        if (index < 0) 
        { 
            list1.Insert(~index, "Dart"); 
            range++; 
        } 

    } 


} 

您可以使用Linq的最简单方法:

List<Card> objSortedList = objListObject.OrderBy(o=>o.ID).ToList();

要么

List<Card> objSortedList = objListObject.OrderByDescending(o=>o.ID).ToList();

您需要实现IComparer

public int Compare(Card card1, Card card2)
{
   if (card1.ID > card2.ID)
      return 1; //move card1 up
   if (card2.ID  < card1.ID)
      return -1; //move card2 up
  return 0; //do nothing
}




sorting