如何对IList <Class>进行排序?

Rye*_*Rye 9 c# linq ilist winforms

没有任何Sort()功能IList.someoene可以帮我这个吗?我想对自己的IList进行排序.

假设这是我的IList:

public class MyObject() 
{
 public int number { get; set; }
 public string marker { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何使用标记字符串对myobj进行排序?

public void SortObject()
{
 IList<MyObject> myobj = new List<MyObject>();
}
Run Code Online (Sandbox Code Playgroud)

Bru*_*oLM 17

使用 OrderBy

public class MyObject() 
{
    public int number { get; set; }
    public string marker { get; set; }
}

IList<MyObject> myobj = new List<MyObject>();
var orderedList = myobj.OrderBy(x => x.marker).ToList();
Run Code Online (Sandbox Code Playgroud)

对于不区分大小写的情况,您应该使用IComparer

public class CaseInsensitiveComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return string.Compare(x, y, StringComparison.OrdinalIgnoreCase);
    }
}

IList<MyObject> myobj = new List<MyObject>();
var orderedList = myobj.OrderBy(x => x.marker, new CaseInsensitiveComparer()).ToList();
Run Code Online (Sandbox Code Playgroud)


小智 11

我会反对使用OrderBy列表,因为它是一个LINQ扩展方法,因此:

  • 它将列表包装在一个枚举中,然后枚举它并填充一个新的临时列表,然后对这个新列表进行排序.
  • 它将排序后的列表包装在另一个可枚举的列表中.
  • 然后当你打电话时ToList(),它会迭代它并用项目填充另一个新列表.

实质上:它除了实际排序外,还创建并填充了2个新列表和2个枚举.相比之下,List.Sort()排序到位并且什么都不做,所以它的效率更高.

我的建议是:

  • 如果您知道基础类型,请使用List.Sort()Array.Sort(array)
  • 如果您不知道基础类型,请将List复制到临时数组并使用它进行排序并将其Array.Sort(array)返回.