2009-11-23 15 views
13

Estoy tratando de crear una matriz de dobles, que representa una correlación entre las entidades.Generar una matriz bidimensional a través de LINQ

Así es como lo estoy haciendo a través de LINQ

double[][] correlationsRaw = (from e in entitiesInOrder 
           select 
           (from f in entitiesInOrder 
            select correlations.GetCorrelation(e, f) 
           ).ToArray()).ToArray(); 

que funciona bien.

Pero lo que yo quiero es una matriz de dos dimensiones ( doble [,]), no una matriz escalonada.

Obviamente, puedo escribir algo anidado para bucle para convertir uno en el otro.

¿Pero hay algún truco de LINQ elegante que pueda usar aquí?

Respuesta

14

No creo que hay una manera fácil de volver directamente a una matriz multidimensional de una consulta LINQ ... aunque se puede crear una función que toma una matriz escalonada y devolver una matriz multidimensional:

public T[,] JaggedToMultidimensional<T>(T[][] jaggedArray) 
{ 
    int rows = jaggedArray.Length; 
    int cols = jaggedArray.Max(subArray => subArray.Length); 
    T[,] array = new T[rows, cols]; 
    for(int i = 0; i < rows; i++) 
    { 
     cols = jaggedArray[i].Length; 
     for(int j = 0; j < cols; j++) 
     { 
      array[i, j] = jaggedArray[i][j]; 
     } 
    } 
    return array; 
} 

Por cierto, podría ser un método de extensión, permitiéndole usarlo en una consulta de Linq ...

+1

@StuartLC o simplemente use 'for (int j = 0; j

Cuestiones relacionadas