0

我需要里面有数组的类:

class FirstClass
{
     int x = 0;
     int y = 0;
}

class SecondClass
{
    FirstClass[] firstclass = ???????? // size of array is unknown
    OtherClass[][] otherclass = ???????? // i need also multidimensional array or array of arrays
}

通常我使用List<>这样的目的,但今天我需要最快的解决方案(处理大量数据),我认为 Array 应该比 List 快(我在某处读过 List 比 Array 慢很多)。

问题是 - 将什么放入“?????????” 在我的代码中?

编辑:

我的课是一个神经网络对象。最大的数组将包含学习数据(100000+ 数据行,50+ 字段,浮点或双精度数据类型)。

如果 Array 比 List 快 1% - 我需要 Array。

4

5 回答 5

2

在知道数组的确切大小之前,您不能创建数组:与列表不同,数组不能增长*;一旦你给他们一个尺寸,他们就会永远保持这个尺寸。如果您必须有一个数组进行处理,请先创建List<T>一个,填充它,然后使用方法转换为数组ToArray()

var firstClassList = new List<FirstClass>();
firtstClassList.Add(new FirstClass(123));
firtstClassList.Add(new FirstClass(456));
FirstClass firstClass[] = firtstClassList.ToArray();

var otherClassList = new List<List<OtherClass>>();
otherClassList.Add(new List<OtherClass>());
otherClassList[0].Add(OtherClass(10));
otherClassList[0].Add(OtherClass(11));
otherClassList.Add(new List<OtherClass>());
otherClassList[1].Add(OtherClass(20));
otherClassList[1].Add(OtherClass(21));
otherClassList[1].Add(OtherClass(22));
OtherClass otherClass[][] = otherClassList.Select(r => r.ToArray()).ToArray();

但是请注意,这是过早的优化:列表与数组一样快,但它们提供了更多的灵活性。用数组替换列表没有意义,至少在你分析之前没有。


*更改数组大小的调用Array.Resize不算作“增长”数组,因为您最终会得到一个不同的数组实例,而您试图“增长”的实例在被复制后立即被丢弃。

于 2013-01-03T20:15:58.037 回答
1

如果您不确定数组的大小,您可能需要考虑使用不同类型的集合,例如List<FirstClass>您提到的 a 或 ArrayList 等。

在性能方面,在您实际测试数据之前,使用 List 可能没问题,如果仍然有问题或瓶颈,请考虑使用 Array 或更有效的结构。(除非您使用非常大的数据集,否则运行时间不应相差太大。)

(也总是可以选择将列表转换为数组。)

于 2013-01-03T20:16:08.790 回答
1

为什么 Array 会比 List 快?有关运行时间的比较,请参阅此问题。

我能想到的唯一情况是,如果您需要搜索一个元素,并且数组已排序,因此您可以进行二进制搜索。但是,由于您可以使用 [] 来索引 C# 中的 List<T>s,因此这是一个有争议的问题。

于 2013-01-03T20:16:14.787 回答
0
var list = new List<FirstClass>();
list.Add(object);

FirstClass[] firstClass = list.ToArray();

var listOfLists = new List<List<SecondClass>>();
var item1 = new List<SecondClass>();
item1.Add(anotherObject);
listOfLists.Add(item1);

SecondClass[][] secondClass = listsOfLists.Select(i => i.ToArray()).ToArray();
于 2013-01-03T20:21:21.523 回答
-5

您可以像这样实例化它们:

FirstClass[] firstclass = new FirstClass[];
OtherClass[][] otherclass = new OtherClass[][];

然后在需要添加元素时使用 Add 方法:

firstclass.Add(new FirstClass());
于 2013-01-03T20:22:48.967 回答