Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#中创建多维数组列表?_C#_Arraylist - Fatal编程技术网

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

如何在c#中创建多维数组列表?,c#,arraylist,C#,Arraylist,是否可以在C#中创建多维arraylist 开始日期、数量和大小是3个数组列表。我需要把它们放在一个数组列表中。我还需要按照StartDate对这个数组列表进行排序。这可能吗?除了arraylist,还有更好的方法吗?你可以这样做,是的。但是在这种情况下,既然每一行看起来都是相关的,为什么不创建一个类来保存数据呢 public class Info { public DateTime StartDate { get; set; } public int Qty { get; se

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


开始日期
数量
大小
是3个数组列表。我需要把它们放在一个数组列表中。我还需要按照
StartDate
对这个数组列表进行排序。这可能吗?除了arraylist,还有更好的方法吗?

你可以这样做,是的。但是在这种情况下,既然每一行看起来都是相关的,为什么不创建一个类来保存数据呢

public class Info
{
    public DateTime StartDate { get; set; }
    public int Qty { get; set; }
    public int Size { get; set; }
}
然后有一个固定的列表来保存对象:

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

你想要一个列表。也没有理由使用ArrayList。从你的例子来看:

List<List<DateTime>> list = new List<List<DateTime>>();
List List=新列表();

上面说的,我更喜欢像贾斯廷这样的东西。

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

public class MyClass
{
    public DateTime StartDate {get;set;}
    public int Qty {get;set;}
    public int Size {get;set;}
}
然后可以创建这些对象的数组:

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

您可以使用一个
SortedList
并向其中添加一个包含3个
列表
实例的对象。然后,您需要编写一个比较器,根据
StartDate

对对象进行排序。如果可以,请使用Justin的答案。从长远来看,这将避免令人头疼的问题,因为每个属性都有意义。如果您需要一种快速方法,并且您有.NET4,您可以在列表中列出
元组。比如

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;
List myData=new List();
Add(新元组(DateTime.Now,1,2));
//
DateTime myDate=myData[0]。项目1;
int myQty=myData[0];
int mySize=myData[0].Item3;
如果您没有.NET4,那么实现自己的元组是很简单的。然而,如果你打算这样做,不妨跳回到顶部,按照贾斯汀的答案去做

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

// 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);
//使用List.sort就地完成降序排序
排序((t1,t2)=>-1*t1.Item1.CompareTo(t2.Item1));
//在序列中根据需要执行降序排序
var orderedList=myData.OrderByDescending(t=>t.Item1);
公共结构MyStruct
{
公共日期时间起始日期{get;set;}
公共整数数量{get;set;}
公共整数大小{get;set;}
}
...
List MyList=新列表();
...
MyList.Sort((item1,item2)=>item1.Qty.CompareTo(item2.Qty))//升序排序
...
MyList.Sort((item1,item2)=>item2.Qty.CompareTo(item1.Qty))//降序排序

该死的……比我快。:-p(+1表示手指比我快。)要按起始日期排序:var sortedList=infoList.OrderBy(x=>x.Startdate)显然它是按降序排列的,所以你应该使用
OrderByDescending()
。作为一项规则(我自己说),避免使用并行数组。始终首选单个对象数组。所以贾斯汀的答案是正确的。我如何在这个列表中添加项目?如果我们要吹嘘.NET4。。。为什么不使用“var myData=…”?我并不特别喜欢
var
,通常只在处理查询时使用它(有时甚至不使用)。对于所有其他方面,我更喜欢在任何时候都明确。我知道在某些情况下,明确是更好的。。。我猜这只是一种偏好,即不需要在=”的每一侧键入两次List>。@Werner,是的,这只是一种偏好。但要扮演魔鬼代言人,您仍然只需键入一次,intellisense将负担放在右侧。可变结构!集合你的妇女和孩子,把他们带到安全的地方@Anthony Pegram:我认为这是一种优化,它将提高排序操作的性能。如果我错了,请纠正我。我不知道结构与类在排序情况下的性能,只是说测试它并在各种场景中查看,所有这些我都无法深入讨论。但我的评论提到了一个事实,即可变结构被广泛认为是邪恶的。更多信息,请参见此问题、答案和链接的博客帖子等@安东尼:你绝对是对的。我在不同的情况下测试了它们。结果很有趣。当将属性与主类型一起使用时,struct list在排序操作中要快一点。但在属性中使用其他类型时,没有太大区别。但在这两种情况下,将大量数据添加到struct list也比class list快一点。
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;
// 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);
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