Там нет простого способа сделать это, потому что в ситуации, вы описываете, нет ничего останавливая double[]
массивы в списке от того, разных размеров, которые бы быть несовместимым с двумерным прямоугольным массивом. Однако, если вы в состоянии гарантировать double[]
массивы все имеют ту же размерность, вы можете построить свой двумерный массив следующим образом:
var arr = new double[ret.Count(),ret[0].Count()];
for(int i=0; i<ret.Count(); i++) {
for(int j=0; j<ret[i].Count(); j++)
arr[i,j] = ret[i][j];
}
Это приведет к ошибке во время выполнения, если какой-либо из double[]
массивы в списке короче первого, и вы потеряете данные, если какой-либо из массивов больше первого.
Если вы действительно решили хранить зубчатый массив в прямоугольном массиве, вы можете использовать «магическое» значение, чтобы указать, что в этой позиции нет значения. Например:
var arr = new double[ret.Count(),ret.Max(x=>x.Count())];
for(int i=0; i<ret.Count(); i++) {
for(int j=0; j<arr.GetLength(1); j++)
arr[i,j] = j<ret[i].Count() ? ret[i][j] : Double.NaN;
}
На редакционном примечании, я думаю, что это очень плохая идея ™; когда вы идете использовать прямоугольный массив, вы должны постоянно проверять на наличие Double.NaN
. Кроме того, что, если вы хотите использовать Double.NaN
как законное значение в массиве? Если у вас есть зубчатый массив, вы должны просто оставить его как зубчатый массив.
звучит так, будто вы хотите, чтобы массив * jagged * не был двумерным массивом - вы уверены, что это ваше требование, поскольку все массивы имеют одинаковую длину? – BrokenGlass
, вероятно, было бы более элегантно изменять код, который нуждается в многомерном массиве. – Jodrell
Возможно, вам следует опубликовать код, который объясняет, что именно вы хотите, и объяснить, почему вы так хотите. – Bernard