C#将数组末尾增加一个元素
在我的程序中,我有一组不断增长的数组,其中新元素一个接一个地增长到数组的末尾。我发现列表在我的程序的一个关键部分是一个速度瓶颈,因为与阵列相比,它们的访问时间很慢-切换到阵列将极大地提高性能,达到可接受的水平。因此,为了增加数组,我使用array.Resize。这很好,因为我的实现将数组大小限制为大约20个元素,所以array.Resize的O(N)性能是有限的 但如果有一种方法可以在不使用数组的情况下,将数组的末尾增加一个元素,那就更好了;我相信它会将旧阵列复制到新大小的阵列C#将数组末尾增加一个元素,c#,arrays,dynamic-arrays,C#,Arrays,Dynamic Arrays,在我的程序中,我有一组不断增长的数组,其中新元素一个接一个地增长到数组的末尾。我发现列表在我的程序的一个关键部分是一个速度瓶颈,因为与阵列相比,它们的访问时间很慢-切换到阵列将极大地提高性能,达到可接受的水平。因此,为了增加数组,我使用array.Resize。这很好,因为我的实现将数组大小限制为大约20个元素,所以array.Resize的O(N)性能是有限的 但如果有一种方法可以在不使用数组的情况下,将数组的末尾增加一个元素,那就更好了;我相信它会将旧阵列复制到新大小的阵列 所以我的问题是,
所以我的问题是,有没有一种更有效的方法可以在不使用列表或数组的情况下将一个元素添加到数组的末尾。调整大小?a
List
与数组一样具有恒定的时间访问权限。对于“成长阵列”,您确实应该使用List
当您知道可能要向阵列支持的结构添加元素时,您不希望一次添加一个新的大小。通常情况下,最好是在阵列填满时将其大小增加一倍。列表中的“分配4个元素开始(除非在构建阵列时指定容量)”,然后每4个元素增加一次
为什么不在数组中尝试类似的方法呢?也就是说,将其创建为包含4个元素,然后在插入第五个元素时,首先将该数组再增加4个元素。将数组按AIK方式增长意味着分配一个新数组,将现有内容复制到新实例。我怀疑这应该比使用
List
…?更快,可以将数组分块调整大小(如10),并将其存储为单独的变量,例如容量,然后仅在达到容量时调整数组大小。这就是列表的工作原理,但是如果您喜欢使用数组,那么您应该考虑在较大的数据块中调整它们的大小,特别是在您有大量数组的情况下。正如前面提到的,调整调用大小是您要寻找的。如果您知道列表的初始大小,则可以向提供初始容量,这将提高初始分配的性能:
List<int> values = new List<int>(5);
values.Add(1);
values.Add(2);
values.Add(3);
values.Add(4);
values.Add(5);
列表值=新列表(5);
增加(1);
增加(2);
增加(3);
增加(4);
增加(5);
无法调整数组大小,因此获得更大数组的唯一方法是使用array.resize
创建新数组
为什么不创建一个从一开始就有20个元素的数组(或者您最多需要的任何容量),并使用一个变量来跟踪数组中使用了多少元素?这样,您就不必调整任何数组的大小。我认为想要使用数组的每个方法都不会得到优化,因为数组是静态结构,所以我认为最好使用动态结构,如列表或其他结构。如果在处理结束时需要数组。ToArray()当然。列表的读取速度似乎比数组慢。在我的代码的关键部分,我读了很多数组,所以它有很大的不同。