【问题标题】:Arraylist in arraylist sorting数组列表排序中的数组列表
【发布时间】:2014-05-03 16:21:55
【问题描述】:

我有一个数组列表。它在其中保留了arraylists。例如;

 ar1 -> {2,3,46,67}  keeps 4 members. 
 ar2 -> {28,96,67} keeps 3 members.
 ar2 -> {56,32,67,54,214} keeps 5 members. 
 Ar_main[0]= ar1 
 Ar_main[1]= ar2 
 Ar_main[2]= ar3

我想按成员数对 ar_main 排序。我使用了冒泡排序算法。但是不行,我们不能像这种方法对arraylist进行排序吗?

private void sortArrayToAscending(ArrayList ar)
    {
        ArrayList ar1,ar2;
        for (int i = 0; i < ar.Count - 1; i++) 
         for (int j = 1; j < ar.Count - i; j++)
          {
             ar1 = (ArrayList)ar[j];
             ar2 = (ArrayList)ar[j-1];
             if (ar1.Count < ar2.Count)
             {
                 ArrayList temp = ar2;
                 ar2=ar1;
                 ar1=temp;             
             }           
          }
    }

【问题讨论】:

  • 您没有将 ar1/ar2 放回 ar。 ar1 和 ar2 只是本地引用。 ar 实际上并没有被修改。您需要将它们放在 ar 中的正确位置。
  • 首先,停止使用ArrayList。自 2005 年 11 月以来,任何用 .Net 编写的程序都不应使用它。请改用List&lt;T&gt;。完成此操作后,您可以使用 LINQ 让这变得非常简单:var sortedList = list.OrderBy(subList =&gt; subList.Count);
  • 谢谢。我看到了 :) 解决了问题 :)

标签: c# sorting arraylist bubble-sort


【解决方案1】:

有一个内置的Sort method in the ArrayList 可以为您进行排序。您必须提供的是一个IComparer 实现比较列表,使其长度成为标准:

public void ArrayListSort()
{
    var list = new ArrayList();
    list.Sort(new LengthComparer());
}

class LengthComparer : IComparer
{
    public int Compare(object x, object y)
    {
        var a = x as ArrayList;
        var b = y as ArrayList;
        // check for null if you need to!
        return a.Count.CompareTo(b.Count);
    }
}

但是,除非您实际使用的是 .NET 1.1,否则我建议您使用 List&lt;T&gt; 而不是 ArrayList,以及 LINQ OrderBy 方法。这是类型安全的,现在我认为它更符合 C# 的习惯。最重要的是,它更短:

var typedList = new List<List<int>>();
var sortedList = typedList.OrderBy(i => i.Count).ToList();

请注意,前者是就地排序(更改原始列表),而后者将结果复制到新列表中。

【讨论】:

    【解决方案2】:

    我还不能发表评论,否则我会的。 C# 在 ArrayList 类中包含一个内置的静态方法。它使用 QuickSort 算法进行排序。您可能想尝试一下,看看是否有帮助。
    Microsoft API Documentation ArrayList.Sort()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2011-05-01
      • 2018-10-16
      • 2018-01-04
      • 2010-10-17
      • 2014-06-04
      相关资源
      最近更新 更多