No hay manera fácil de hacer esto debido a que en la situación que describes, no hay nada que impida que los double[]
matrices en la lista de ser diferentes tamaños, lo que haría ser incompatible con una matriz rectangular bidimensional. Sin embargo, si se encuentra en la posición de garantizar los double[]
matrices todos tienen la misma dimensión, puede construir su matriz bidimensional de la siguiente manera:
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];
}
Esto producirá un error en tiempo de ejecución si cualquiera de los double[]
las matrices en la lista son más cortas que la primera, y perderá datos si alguna de las matrices es más grande que la primera.
Si realmente está decidido a almacenar una matriz dentada en una matriz rectangular, puede usar un valor "mágico" para indicar que no hay ningún valor en esa posición. Por ejemplo:
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;
}
En una nota editorial, creo que esto es una idea muy mala ™; Cuando vaya a utilizar la matriz rectangular, debe verificar Double.NaN
todo el tiempo. Además, ¿qué pasaría si quisiera usar Double.NaN
como un valor legítimo en la matriz? Si tienes una matriz dentada, solo debes dejarla como una matriz dentada.
suena como si quisiera una matriz * dentada * no una matriz 2D: ¿está seguro de que es su requisito ya que todas las matrices tienen la misma longitud? – BrokenGlass
probablemente sería más elegante cambiar el código que necesita la matriz multidimensional. – Jodrell
Quizás deba publicar un código que explique exactamente lo que desea y explique por qué lo desea de esa manera. – Bernard