Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net_C# 4.0_.net 4.0 - Fatal编程技术网

C# 数组、数组列表还是列表列表?

C# 数组、数组列表还是列表列表?,c#,.net,c#-4.0,.net-4.0,C#,.net,C# 4.0,.net 4.0,我打算使用一个标准数组,我需要它的行数为x,列数为2 double[,] members = new double[x, 2]; 循环遍历我得到的所有结果,然后将它们添加到数组中,但是由于结果的数量可能会改变,我不想预先定义数组的大小 members[0, 0] = cost; members[x, 1] = tax; x++; 我正在考虑调整数组的大小,但是使用数组列表或列表是否更容易呢?您应该使用列表使用列表 发件人: ArrayList已被速度更快、功能更多的列表所取代 T可以是Lis

我打算使用一个标准数组,我需要它的行数为x,列数为2

double[,] members = new double[x, 2];
循环遍历我得到的所有结果,然后将它们添加到数组中,但是由于结果的数量可能会改变,我不想预先定义数组的大小

members[0, 0] = cost;
members[x, 1] = tax;
x++;

我正在考虑调整数组的大小,但是使用数组列表或列表是否更容易呢?

您应该使用
列表
使用
列表

发件人:

ArrayList已被速度更快、功能更多的
列表所取代


T
可以是
List
double[2]
struct
或2元组。。。但是正如Marc所说,如果嵌套的
列表总是有两个项目,那么使用
列表就太过分了。

如果空间是额外的,它可能是一个具有两个双精度的结构(顺便说一句,decimal是否更合适?对于金钱来说,它几乎总是一个更好的选择),但如果是这样的话:让它不变

例如:

public struct YourType {
    private readonly decimal cost, tax;
    public decimal Cost { get { return cost; } }
    public decimal Tax { get { return tax; } }
    public YourType(decimal cost, decimal tax) {
        this.cost = cost;
        this.tax = tax;
    }
}
与:

List List=新列表();

第二维度中的项目数可能是固定的,或者至少是可预测的,因此如果您使用的是Microsoft.NET Framework 4.0,则可以使用元组列表:

List<Tuple<double, double>> list = new List<Tuple<int, int>>();

// In your loop...
list.Add(Tuple.Create(cost, tax));

// ... later when retrieving some tuple...
int item0cost = list[0].Item1;
int item0tax = list[0].Item2;
List List=新列表();
//在你的循环中。。。
list.Add(Tuple.Create(cost,tax));
// ... 稍后检索某个元组时。。。
int item0cost=list[0].Item1;
int item0tax=list[0].Item2;

您总是可以实现某种具有成本和税收属性的值对象类,但是使用元组,您可以像我在代码示例中向您展示的那样轻松地实现它。

已知正好有两列;使用“锯齿状”是一种非常昂贵的方法,已知正好有两列;“锯齿状”是一种非常昂贵的方法this@Marc二元组和锯齿数组一样昂贵。当然,也有可能以另一种方式创建一个锯齿状阵列,这将相对便宜。但我还是会选择你建议的结构。即使只是为了得到有意义的属性名。@CodeInChaos我没有提到元组;如果你的意思是“因为它是一个引用类型”,那么当然,
Tuple
也是如此,但这不是唯一的Tuple类型。实际上,由于存储长度的原因,数组的成本稍微高一些。奇怪的是,仔细想想,您可以使用一个
double[]
并将长度加倍,因此项目“3”实际上由arr[6]和arr[7]组成。太好了,我相信您的用例足够简单,可以使用元组而不是值对象。
List<Tuple<double, double>> list = new List<Tuple<int, int>>();

// In your loop...
list.Add(Tuple.Create(cost, tax));

// ... later when retrieving some tuple...
int item0cost = list[0].Item1;
int item0tax = list[0].Item2;