对象类型的arraylist

时间:2017-02-20 06:40:57

标签: c# linq arraylist

我使用arraylist并在其中存储简单的对象数组,我的示例代码片段

  ArrayList rows = new ArrayList();

        object[] objs = new object[3];

        objs[0] = 1;
        objs[1] = "dilip";
        objs[2] = 27;
        rows.Add(objs);

        objs = new object[3];

        objs[0] = 2;
        objs[1] = "lucky";
        objs[2] = 42;
        rows.Add(objs);

        objs = new object[3];
        objs[0] = 3;
        objs[1] = "user";
        objs[2] = 46;
        rows.Add(objs);
        objs = new object[3];
        objs[0] = 4;
        objs[1] = "testing";
        objs[2] = 76;
        rows.Add(objs);
        objs = new object[3];
        objs[0] = 5;
        objs[1] = "trying";
        objs[2] = 44;
       rows.Add(objs);

如何在任何对象索引上应用asc或desc排序 例如,基于索引1的名称排序或基于索引2的年龄排序。

请提供任何建议。 谢谢..

3 个答案:

答案 0 :(得分:1)

大多数LINQ方法都适用于强类型IEnumerable<T>接口。

使用此OfType

之类的rows.OfType<object[]>().OrderBy(x => x[1])方法

虽然您接近数据结构的方式很快就会使代码无法维护。您最好考虑使用类来反映您的数据。

答案 1 :(得分:0)

是否有理由不能使用List<object[]>而不是ArrayList

例如:

List<object[]> rows = new List<object[]>();

object[] objs = new object[3];

objs[0] = 1;
objs[1] = "dilip";
objs[2] = 27;
rows.Add(objs);

var query = rows.Where(r => (string)r[1] == "dilip");

然后你可以做各种各样的排序等等。

var query = rows
    .OrderBy(r => (int)r[0])
    .OrderBy(r => (string)r[1])
    .OrderByDescending(r => (int)r[2]);

答案 2 :(得分:0)

您需要使用比较器对ArrayList类型进行排序。在你的情况下,它看起来像这样:

public class MyComparer : IComparer
{
    int IComparer.Compare(Object x, Object y)
    {
        int sortingIndex = 1;

        var xUnbox = x as object[];
        var yUnbox = y as object[];

        return ((new CaseInsensitiveComparer()).Compare(yUnbox[sortingIndex], xUnbox[sortingIndex]));
    }
}

有了这个,您现在可以对ArrayList进行排序:

var comparer = new MyComparer();
rows.Sort(comparer);

foreach (object[] line in rows)
{
    Console.WriteLine(line[1]);
}

此示例将按索引1对ArrayList进行排序。

虽然我强烈建议使用强类型集合,例如List<YourType>,但从那以后你就可以通过Linq命令了。