关于其子元素在c#中对arraylist进行排序

时间:2019-06-08 11:59:37

标签: c# arrays sorting arraylist

我有一个ArrayList,其元素是Array。我想做的是使用ArrayList的元素对此Array进行排序。为了澄清起见,假设我们有以下arraylist:

arraylist{[10,2], [6,3], [12,2]}

然后我想通过将数组的每个元素彼此分开(数组a_i = [a_i,b_i] ==> sort using max(a_i/b_i))(即,以以下形式)将其降序排列:

arraylist{[12,2],[10,2],[6,3]}

我尝试使用Sort(),但据我所知,它用于列表,而不是ArrayList。有人能让我知道如何有效地对它进行排序以避免复杂性吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

ArrayList已过时,您真的不应该再使用它了..:

  

MSDN:我们不建议您将ArrayList类用于新开发。相反,我们建议您使用通用的List类。

假设您创建了一个List<Tuple<int, int>>,也许是这样的:

var tupleList = new List<Tuple<int, int>>
{
    new Tuple<int, int>(10,2 ),
    new Tuple<int, int>(6,3),
    new Tuple<int, int>(12,2)
};

然后可以使用Linq创建结果,也许像这样:

var sorted = tupleList.OrderByDescending(x => x.Item1 / x.Item2);

这会将div的所有检查都删除为零。

要使初始化短一些,可以使用一个函数。

Func<int, int, Tuple<int, int>> tc = Tuple.Create;

..摘自here并写:

var tupleList = new List<Tuple<int, int>>
{
    tc(10,2 ),
    tc(6,3 ),
    tc(12,2 )
};

答案 1 :(得分:3)

就像有人在评论中说的那样,最好使用List<T>。但是这是将Sort()与IComparer()一起使用的方法

class DivisionComparer : IComparer<int[]>, IComparer
{

    public int Compare(int[] x, int[] y)
    {
        double xval = (double) x[0] / x[1];
        double yval = (double) y[0] / y[1];
        return yval.CompareTo(xval);
    }

    public int Compare(object x, object y)
    {
        return Compare((int[]) x, (int[]) y);
    }
}


class Program
{

    static void Main(string[] args)
    {

        var x = new ArrayList()
        {
            new [] {6,3},                
            new [] {12,2},
            new [] {10,2},

        };
        x.Sort(new DivisionComparer());
        foreach (var el in x)
        {
            Debug.WriteLine(string.Join(",", (int[]) el));
        }
    }
}

这将输出:

12,2
10,2
6,3