数组列表与对象类型
问题描述:
喜使用ArrayList和存储简单对象阵列中,我,我的示例代码snipt数组列表与对象类型
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 ..
请提供任何建议。 谢谢..
答
你需要有比较器进行排序您的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]);
}
这个例子会被索引排序您的ArrayList 1.
虽然我会强烈建议使用强类型的集合,如List<YourType>
来代替,因为那样你可以只用Linq命令。
答
大多数LINQ方法将与强类型的IEnumerable<T>
接口一起使用。
使用OfType
这样rows.OfType<object[]>().OrderBy(x => x[1])
尽管方式方法你接近你的数据结构很快就会使代码难以维护。你最好考虑使用类来反映你的数据。
答
有没有理由不能使用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]);
为什么有人会使用非泛型'ArrayList'的非类型'object []'。它使您的代码变得困难,不可读和容易出错,并出现从“InvalidCastExceptions”开始的装箱/取消装箱性能开销的不同问题。改为使用类型化的数组结构。 –
我知道,但其现有的项目和新的木工不能提出设计更改。现有的设计有什么办法?谢谢 – Dilip
@Dilip使用'List