繁体   English   中英

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

[英]How to apply Array.Sort to Collection<T>?

我有一个集合(集合中有大于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
}

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

如何对我的Collection<T>排序? (无复制)

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

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

什么,你也可以做的是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM