如何将Array.Sort应用于Collection <T>?

isx*_*ker 1 .net c# arrays collections list

我有一个集合(集合中有大于100K的自定义复杂项目,添加新项目的情况确实经常发生)。我只需要对它进行一次排序-在显示它之前。为了简化我的问题,可以说我有一个需要排序的整数集合:

private static void Main(string[] args)
{
    var collection = new Collection<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    var array = new [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

    // How to apply Array.Sort to Collection<T> ?
    list.Sort();       //ok
    Array.Sort(array); //ok
}
Run Code Online (Sandbox Code Playgroud)

基本list.Sort();用途Array.Sort<T>(this._items, index, count, comparer);

我该如何分类Collection<T>?(无复制)

Mar*_*ell 9

没有方便的方法可以做到这一点。Collection<T>甚至对于子类(protected)都不提供对内部缓冲区的原始访问。否则,您将无法进行干净的就地排序。

您可以在基础.Itemsprotected)上手动实现排序,但这需要大量工作,而且效率很低。

可能还做的是:

  • 从阵列池中租借阵列
  • 将数据从本地集合复制到租用数组
  • 排序数组
  • 清除并重新添加已排序数组中的所有内容,或覆盖已排序数组中逐索引的项目
  • 将租用的数组返回到数组池

但是,我个人可能会说“如果您需要排序,请使用List<T>”-这样可以节省很多工作。