我使用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的年龄排序。
请提供任何建议。 谢谢..
答案 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命令了。