Enumerable.Repeat有一些内存问题? [英] Enumerable.Repeat has some memory issues?

查看:119
本文介绍了Enumerable.Repeat有一些内存问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将一个数组初始化为

Double[][] myarr = Enumerable.Repeat(new double[12], 13).ToArray();

然后在循环中,我递增

之类的值

myarr[0][0]++; 

这将导致myarr [1] [0],myarr [2] [0],myarr [3] [0] ..... myarr [12] [0]之类的所有值加1.

使用for循环(0-12)进行初始化时不会发生此问题

myarr[i] = new double[12];

为什么会这样?

解决方案

其他答案已解释了该问题.解决方案是在每次迭代中创建一个新数组,例如

double[][] myarr = Enumerable.Range(0, 13)
                             .Select(ignored => new double[12])
                             .ToArray();

I initialized an Array as

Double[][] myarr = Enumerable.Repeat(new double[12], 13).ToArray();

Then in a loop i am incrementing values like

myarr[0][0]++; 

This causes all values like myarr[1][0], myarr[2][0], myarr[3][0] ..... myarr[12][0] to increment by one.

This problem is not occurring when using a for loop (0-12) i am initializing like

myarr[i] = new double[12];

Why is this so?

解决方案

Other answers have explained the problem. The solution is to create a new array on each iteration, e.g.

double[][] myarr = Enumerable.Range(0, 13)
                             .Select(ignored => new double[12])
                             .ToArray();

这篇关于Enumerable.Repeat有一些内存问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆