是否可以在C#中创建多维arraylist?
StartDate Qty size
9/1/2010 10 15
9/1/2009 12 17
9/1/2008 11 19
StartDate
,Qty
和size
是3个arraylists。我需要把它们放在一个arraylist中。我还需要通过StartDate
对这个arraylist进行排序。这可能吗?除了arraylist之外,还有更好的方法吗?
答案 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