如何在c#中创建多维数组列表?

时间:2010-09-28 18:33:48

标签: c# arraylist

是否可以在C#中创建多维arraylist?

StartDate   Qty   size
9/1/2010    10     15
9/1/2009    12     17
9/1/2008    11     19

StartDateQtysize是3个arraylists。我需要把它们放在一个arraylist中。我还需要通过StartDate对这个arraylist进行排序。这可能吗?除了arraylist之外,还有更好的方法吗?

6 个答案:

答案 0 :(得分:30)

你可以这样做,是的。但在这种情况下,由于每一行似乎都是相关的,为什么不创建一个类来保存数据:

public class Info
{
    public DateTime StartDate { get; set; }
    public int Qty { get; set; }
    public int Size { get; set; }
}

然后只需要一个常规List来保存对象:

List<Info> infoList = new List<Info>();

这将使您免于担心每个列表的排序。要处理排序,可以使用LINQ to Objects Extension方法:

var sortedList = infoList.OrderBy(i => i.StartDate);

答案 1 :(得分:2)

如果可以的话,请选择贾斯汀的答案。从长远来看,它会节省头痛,因为每个属性都有意义。如果您需要快速方法并且拥有.NET 4,则可以在列表中列出Tuple。如

List<Tuple<DateTime, int, int>> myData = new List<Tuple<DateTime, int, int>>();
myData.Add(new Tuple<DateTime, int, int>(DateTime.Now, 1, 2));

//

DateTime myDate = myData[0].Item1;
int myQty = myData[0].Item2;
int mySize = myData[0].Item3;

如果你没有.NET 4,那么实现你自己的元组是微不足道的。但是,如果你打算这样做,不妨回过头来看看贾斯汀的答案。

编辑为了完整起见,以下是使用此方法的排序选项。

// descending sort done in place using List<>.Sort
myData.Sort((t1, t2) => -1 * t1.Item1.CompareTo(t2.Item1)); 

// descending sort performed as necessary in a sequence
var orderedList = myData.OrderByDescending(t => t.Item1);

答案 2 :(得分:1)

您需要列表清单。没理由也使用ArrayList。从你的例子:

List<List<DateTime>> list = new List<List<DateTime>>();

那就是说,我更喜欢Justin在上面所示的内容。

答案 3 :(得分:1)

如果这些属性描述实体或“数据行”,您可以考虑创建一个类:

public class MyClass
{
    public DateTime StartDate {get;set;}
    public int Qty {get;set;}
    public int Size {get;set;}
}

然后,您可以创建这些对象的数组:

List<MyClass> myClassArray = new List<MyClass>();

答案 4 :(得分:0)

您可以使用SortedList<>并添加一个包含3 List<>个实例的对象。然后你需要编写一个比较器来按StartDate

对对象进行排序

答案 5 :(得分:0)

public struct MyStruct
{
    public DateTime StartDate { get; set; }
    public int Qty { get; set; }
    public int Size { get; set; }
}
...
List<MyStruct> MyList = new List<MyStruct>();
...
MyList.Sort((item1, item2) => item1.Qty.CompareTo(item2.Qty)); //ascending sort
...
MyList.Sort((item1, item2) => item2.Qty.CompareTo(item1.Qty)); //descending sort