可能重复:
如何使用特定值快速填充数组?
有没有办法初始化一个单值如-1的整数数组而不必显式分配每个项目?
基本上,如果我有
int[] MyIntArray = new int[SomeCount];
Run Code Online (Sandbox Code Playgroud)
默认情况下,所有项目都分配为0.有没有办法在不使用循环的情况下将该值更改为-1?或使用{}明确指定每个项目?
本来我想知道是否ToList比使用的构造函数分配的内存List<T>这需要一个IEnumerable<T>(没有区别).
出于测试目的,我曾经Enumerable.Range创建了一个源数组,我可以用它来创建List<int>via 1. ToList和2. constructor的实例.两者都在创建副本.
这就是我注意到以下内存消耗的巨大差异:
Enumerable.Range(1, 10000000) 要么 Enumerable.Range(1, 10000000).ToArray()当我使用第一个并调用ToList生成的对象时,内存比数组(38,26MB/64MB)大约多60%.
问:推理错误的原因是什么?
var memoryBefore = GC.GetTotalMemory(true);
var range = Enumerable.Range(1, 10000000);
var rangeMem = GC.GetTotalMemory(true) - memoryBefore; // negligible
var list = range.ToList();
var memoryList = GC.GetTotalMemory(true) - memoryBefore - rangeMem;
String memInfoEnumerable = String.Format("Memory before: {0:N2} MB List: {1:N2} MB"
, (memoryBefore / 1024f) / 1024f
, (memoryList / 1024f) / 1024f);
// …Run Code Online (Sandbox Code Playgroud) 拥有以下代码是否有更简洁的方法将数组从1初始化为由变量指定的数字?
int nums=5;
int[] array= new int[nums];
for(int i=0;i<num;i++)
{
array[i] = i;
}
Run Code Online (Sandbox Code Playgroud)
也许用linq或一些array.function?