【问题标题】:Order IEnumerable without LINQ在没有 LINQ 的情况下订购 IEnumerable
【发布时间】:2012-09-28 12:41:58
【问题描述】:

您能否就如何在 .NET 3.0(无 LINQ)中对 IEnumerable<byte> indexes 进行排序提供任何解决方案? 当然可以确定indexes 的长度,创建数组,逐个元素复制,然后调用Array.Sort(array)。但是您可能还有其他建议吗?

【问题讨论】:

    标签: c# .net .net-3.0


    【解决方案1】:

    只要您不使用 2.0 编译器(例如:VS 2008 / 2010 / 2012),您就可以使用 LINQBridge,并使用 .NET 2.0/3.0 代码中的 LINQ-to-Objects。

    另一个懒惰的解决方案是:

    List<byte> list = new List<byte>(indexes);
    list.Sort();
    // list is now a sorted clone of the data
    

    【讨论】:

      【解决方案2】:

      C# 2.0C# 2.0中,除了“手动”迭代之外,别想有任何其他解决方案

      创建数组的另一种选择。

      您可以创建List&lt;&gt;

      var list = new List<byte>(indexes ); 
      list.Sort(delegate(byte b1, byte b2)
      {
            //your comparison logic here
      });
      

      它比简单的forforeach 迭代更紧凑。

      【讨论】:

        【解决方案3】:

        排序时必须读取整个IEnumerable&lt;&gt;,所以没有办法解决这个问题。甚至 Linq to Objects 方法Sort 也将整个集合保存在内存中。

        IEnumerable&lt;byte&gt; 创建一个List&lt;byte&gt; 并对其进行排序:

        List<byte> list = new List<byte>(indexes);
        list.Sort();
        

        【讨论】:

          【解决方案4】:

          由于您无法真正更改 IEnumerable,因此您必须将数据复制到其他地方才能对其进行排序。

          但是,请注意您正在对字节进行排序,您可以使用 Bucket Sort 进行超高效的排序。

          【讨论】:

            【解决方案5】:

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-06-15
              • 1970-01-01
              • 2011-01-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-08
              • 2013-02-04
              相关资源
              最近更新 更多